首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

完全不使用配置文件构建和使用WCF服务

  CLR拿到控制权后,首先创建一个工作进程,以便在进程内创建应用程序域。

  CLR创建工作进程后,首先会创建一个缺省应用程序域,这个缺省应用程序域一般不用来加载用户代码。之后,开始在在新的应用程序域中加载用户代码,并运行。

  具体到承载WCF的console应用,是个dotnet的exe程序,运行后被CLR加载到一个应用程序域后,ServiceHost就在这个应用程序内运行

  在一个Application Domain中可以实例化多个 ServiceHost 实例,但每个应用程序域内只有一个 ServiceHost 实例更便于操作。您可以在一个宿主内使用多个端点公开多个服务接口。

  1.3. 给ServiceHost添加Endpoint

  Endpoint是直接暴露给客户端就行通讯的接口,经典的一个Endpoint可以用ABC来描述,即address – 这个Endpoint对外的访问地址,binding – 这个Endpoint是通过什么样的通讯手段暴露给客户端的,Contract —— 这个Endpoint对外暴露的是哪个Contract.

  通过两个方法给ServiceHost添加Endpoint

  1.3.1. ServiceHost.AddServiceEndpoint

  AddServiceEndpoint方法有8种重载,ServiceHost提供了四种:

  ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address);

  ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address);

  ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, string address, Uri listenUri);

  ServiceEndpoint AddServiceEndpoint(Type implementedContract, Binding binding, Uri address, Uri listenUri);

  ServiceHost的父类ServiceHostBase也提供了四种:

  ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address);

  ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address);

  ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, string address, Uri listenUri);

  ServiceEndpoint AddServiceEndpoint(string implementedContract, Binding binding, Uri address, Uri listenUri);

  其中参数implementedContract为Contract的完全名称,即名称空间。类名。

  myServiceHost.AddServiceEndpoint(typeof(WCFService.IService), new BasicHttpBinding(), "");

  1.3.2. ServiceHost.Description.Endpoints.Add(ServiceEndpoint item)

  ServiceHost.Description 是一个 ServiceDescription 类型的对象。

  ServiceDescription 是一个Service在内存中的一个完整的描述,包括服务的所有Endpoint,和每个Endpoint的各自的address、binding、contract和behaviors.

  使用此方法先要根据Endpoint的ABC构造一个ServiceEndpoint 对象。

  ServiceEndpoint(ContractDescription contract, Binding binding, EndpointAddress address)

  其中ContractDescription这样通过ContractDescription的静态方法GetContract构造:

  ContractDescription.GetContract(Type contractType);

  ServiceEndpoint myServiceEndpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(WCFService.IService)), new BasicHttpBinding(), new EndpointAddress(baseAddress));

  myServiceHost.Description.Endpoints.Add(myServiceEndpoint);

  1.4. 视需要给ServiceHost添加behavior

  ServiceHost. Behaviors是一个 IServiceBehavior类型的对象集合。

  IserviceBehavior 提供了一个在整个服务范围内修改或则插入定制扩展的机制。

  如果需要把服务通过WSDL对外暴露对服务的Metadata描述,就需要加一个ServiceMetadataBehavior类型的Behavior:

  ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();

  behavior.HttpGetEnabled = true;

  behavior.HttpGetUrl = new Uri("http://localhost:8001/");

  myServiceHost.Description.Behaviors.Add(behavior); // myServiceHost是ServiceHost实例

  要发布Metadata,ServiceHost必须有一个http的baseAddress,所以在构造ServiceHost实例时,就需要在构造方法中加入这个http的baseAddress,这个http的baseAddress就是对外发布的Metadata地址。

  1.5. 打开ServiceHost,开始提供服务

  ServiceHost构建好了,添加了需要的Endpoint、behavior后,使用ServiceHost.Open()方法开发ServiceHost实例,开始对外提供服务。

上一页  [1] [2] [3] 下一页

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 社区讨论
 博客论点
 Dotnet频道相关导航