下载首页 | 资讯中心 | 文章分类 | 最近更新 | 排 行 榜 | 国产软件 | 国外软件 | 绿色软件 | 汉化补丁 | |
文章搜索: 分类 关键字
您的位置:首页软件技巧操作系统 → WinVista新技术 WCF开发指南之构建服务
WinVista新技术 WCF开发指南之构建服务
来源:天极yesky 作者:朱先忠编译 加入时间:2006-12-8 访问次数:85 [  ]



<%@ ServiceHost
Language = "C#"
Debug = "true"
CodeBehind = "~/App_Code/MyService.cs"
Service = "MyService"
%>

  你甚至可以把服务代码以内联方式注入到.svc文件中,但是不建议这样用(就象对于ASMX的情形一样)。一旦你准备好了.svc文件,你就可以使用一个浏览器来观看它。如果一切顺利,那么你将得到一个确认页面。

  Visual Studio 2005能够为你生成一个新的IIS宿主的服务。这只要从File菜单下选择"New Website",然后从"New Web Site"对话框中选择WinFX服务。这使得Visual Studio 2005创建一个新的Web站点,服务代码和匹配的.svc文件。另外,Web站点配置文件必须列举出你想要暴露的服务类型。你需要使用完全限定类型名(包括程序集名),如果类型来自于一个未引用的程序集的话。

<system.serviceModel>
<services>
<service name="MyNamespace.MyService">
...
</service>
</services>
</system.serviceModel>

  七. 自宿主

  自宿主是当开发者负责提供和管理宿主进程的生命周期时使用的技术名词。自宿主被应用在位于客户端和服务之间的一个进程(或计算机)边界环境中,以及当使用进程中服务的情况下(也就是说,与客户端处于相同的进程中)。你需要提供的进程可能是任何Windows进程,例如,一个Windows表单应用程序,一个控制台应用程序或一个Windows NT服务。注意,该进程必须在客户端调用服务之前先运行起来;典型情况下,这意味着,你必须预先启动它。对于NT进程中服务来说这并不是一个问题。

  类似于IIS宿主,宿主应用程序配置文件必须列出你想宿主的服务的类型并且暴露给外界。而且,该宿主进程必须在运行时刻显式地注册服务类型并且打开该宿主以便于客户端调用。典型地,这是在Main()方法中使用如下定义的助理类ServiceHost实现的:

public interface ICommunicationObject : IDisposable
{
void Open();
void Close();
//更多成员
}
public abstract class CommunicationObject :
ICommunicationObject
{...}
public class ServiceHostBase : CommunicationObject,...
{...}
public class ServiceHost : ServiceHostBase,...
{
public ServiceHost(Type serviceType,
params Uri[]baseAddresses);
//更多成员
}

  提供给ServiceHost的构造函数的信息有:服务类型和(可选)默认的基地址。该基地址集可以是一个空集(以后,你可以配置不同的基地址)。拥有一组基地址能够使服务接受在多个地址和协议上的调用。注意,每个ServiceHost实例都关联与一个特定的服务类型,并且如果宿主进程需要宿主多个类型的服务的话,你需要一些匹配的ServiceHost实例。通过调用宿主中的ServiceHost.Open()方法,你允许调入(call-in);并且通过调用ServiceHost.Close()方法,你可以体面地退出宿主实例并完成到当前客户端的数据发送,并且还要拒绝未来的客户端调用-即使宿主进程仍在运行中。典型地,关闭操作是在宿主进程关闭时实现的。例如,为了把这个服务宿主在一个Windows表单应用程序中:

[ServiceContract]
interface IMyContract
{...}
class MyService : IMyContract
{...}
你可以编写:
public static void Main()
{
Uri baseAddress = new Uri("http://localhost:8000/");
ServiceHost serviceHost;
serviceHost = new ServiceHost(typeof(MyService),baseAddress);
serviceHost.Open();
//能够拦截调用:
Application.Run(new MyForm());
serviceHost.Close();
}

  注意,你可以在调用ServiceHost.Open()之后拦截调用,因为该宿主接收在工作者线程上的所有调用。对ServiceHost.Open()的调用将加载WCF运行时刻并且支持接收客户端调用。该宿主能注册多个基地址,只要它们至少在传输方面存在不同:

Uri tcpBaseAddress = new Uri("net.tcp://localhost:8001/");
Uri httpBaseAddress = new Uri("http://localhost:8002/");
ServiceHost serviceHost = new ServiceHost(typeof(MyService),tcpBaseAddress,httpBaseAddress);

  通过从"Add New Item"对话框中选择WCF服务,Visual Studio 2005允许你把一个WCF服务添加到任何应用程序工程。以此方式添加的服务当然是进程中服务(相对于宿主进程来说),但是也可以由外部客户端存取。
上一页 [1] [2] [3] [4] [5] [6] 下一页
评论人 评论内容摘要(共 0 条,查看完整内容) 得分 0 发表时间
 热点文章
·惊爆!《暗黑破坏神3》将对应全平台
·《荣誉勋章:太平洋之战》中文版上市
·MediaShow魅力四射快速制作音乐电子相册
·《花木兰》完美流程攻略
·轻松可爱 最新10大Q版网络游戏推荐
·2006年暑期新宣布免费网络游戏一览
·photoshop制作水晶球中的精灵
·NVIDIA发布Forceware 93.71 WHQL驱动
·经验分享 微软Word2007实用技巧两则
·国内新记录产生 1M super pi运算仅用9秒
 推荐文章
·微软高官爆料:欧盟对Vista哪些功能不安
·在Google Talk上与QQ、MSN好友聊天
·Word使用过程中的常见问题及其解决
·手把手教你内存终极变相“造假”大法
·NVIDIA联手海盗船 推出自动超频内存
·Windows Vista特殊功能介绍:语音识别
·公安机关检验软件样本 流氓软件制造者面临坐牢危..
·比英特尔UMPC还要小 移动PC新品推出
·性感暴力完美结合 御姐武戏X新画面
·盖茨访谈:我就是微软里的兼职员工
WinXP下载基地 版权所有 Copyright© 2006-2008 WWW.WinXpd.COM, All Rights Reserved. 页面维护: WinXP下载基地(WinXP基D)