浅析概括WCF自托管宿主

开发 后端
这里介绍了利用WCF自托管宿主解决案例,如果是Windows应用程序,则可以将创建ServiceHost实例的代码放在主窗体的相关代码中,保证服务WCF自托管宿主不会被关闭。

学习WCF时,你可能会遇到WCF自托管宿主问题,这里将介绍WCF自托管宿主问题的解决方法,在这里拿出来和大家分享一下。利用WCF提供的ServiceHost<T>提供的Open()和Close()方法,可以便于开发者在控制台应用程序,Windows应用程序乃至于ASP.NET应用程序中托管服务。不管自宿主的环境是何种应用程序,实质上托管服务的方式都是一致的。例如在控制台应用程序中:

  1. using (ServiceHost host = new ServiceHost(typeof(DocumentsExplorerService)))   
  2. {   
  3. host.Open();   
  4.  
  5. Console.WriteLine("The Service had been launched.");   
  6. Console.Read();   
  7. }   


#T#ServiceHost实例是被创建在应用程序域中,因此我们必须保证宿主进程在调用服务期间不会被关闭,因此我们利用Console.Read() 来阻塞进程,以使得控制台应用程序能够一直运行,直到认为地关闭应用程序。如果是Windows应用程序,则可以将创建ServiceHost实例的代码放在主窗体的相关代码中,保证服务WCF自托管宿主不会被关闭。相应地,我们需要配置应用程序的app.config配置文件:

  1. <configuration>   
  2. <system.serviceModel>   
  3. <services>   
  4. <service name="BruceZhang.WCF.DocumentsExplorerServiceImplementation.DocumentsExplorerService" behaviorConfiguration="DocumentExplorerServiceBehavior">   
  5. <host>   
  6. <baseAddresses>   
  7. <add baseAddress="http://localhost:8008/DocumentExplorerService"/>   
  8. </baseAddresses>   
  9. </host>   
  10. <endpoint   
  11. address=""   
  12. binding="basicHttpBinding"   
  13. bindingConfiguration="DocumentExplorerServiceBinding"   
  14. contract="BruceZhang.WCF.DocumentsExplorerServiceContract.IDocumentsExplorerService"/>   
  15. <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>   
  16. </service>   
  17. </services>   
  18. <bindings>   
  19. <basicHttpBinding>   
  20. <binding name="DocumentExplorerServiceBinding" sendTimeout="00:10:00" transferMode="Streamed"   
  21. messageEncoding="Text" textEncoding="utf-8" maxReceivedMessageSize="9223372036854775807">   
  22. </binding>   
  23. </basicHttpBinding>   
  24. </bindings>   
  25. <behaviors>   
  26. <serviceBehaviors>   
  27. <behavior name="DocumentExplorerServiceBehavior">   
  28. <serviceMetadata httpGetEnabled="true"/>   
  29. </behavior>   
  30. </serviceBehaviors>   
  31. </behaviors>   
  32. </system.serviceModel>   
  33. </configuration>  


注意,配置文件中的服务名必须包含服务契约以及服务类的命名空间。此外,在配置文件中我通过<baseAddresses>标签为服务添加了基地址,因此在endpoint中,address为""。

责任编辑:田树 来源: 博客
相关推荐

2009-12-21 17:05:59

WCF自托管宿主

2009-11-05 11:23:08

WCF宿主

2010-02-22 16:19:25

WCF自托管

2010-02-25 18:37:23

WCF自宿主

2009-11-05 11:12:21

WCF自宿主

2009-11-09 11:15:06

WCF消息队列

2009-11-06 09:14:14

WCF可靠性

2009-11-09 10:43:51

WCF Web编程模型

2009-03-25 09:43:51

开发自定义托管WCF

2023-05-30 16:02:34

云托管云计算自托管

2010-02-22 16:09:33

WCF宿主

2009-11-06 15:54:15

WCF异步调用

2010-02-25 13:35:27

WCF tcpTrac

2009-12-23 09:57:31

Linux关机或休眠

2009-11-03 10:00:20

VB.NET New方

2009-11-09 16:57:05

WCF托管特性

2010-03-02 14:30:41

WCF宿主模式

2010-02-24 17:17:04

WCF宿主环境

2009-11-05 11:05:19

WCF服务合同

2009-11-02 17:49:05

VB.NET抽象类
点赞
收藏

51CTO技术栈公众号