学习WCF时你可能会遇到WCF自托管宿主问题这里将介绍WCF自托管宿主问题的解决方法在这里拿出来和大家分享一下利用WCF提供的ServiceHost<T>提供的Open()和Close()方法可以便于开发者在控制台应用程序Windows应用程序乃至于ASPNET应用程序中托管服务不管自宿主的环境是何种应用程序实质上托管服务的方式都是一致的例如在控制台应用程序中 using (ServiceHost host = new ServiceHost(typeof(DocumentsExplorerService))) { hostOpen(); ConsoleWriteLine(The Service had been launched); ConsoleRead(); } 关于WCF服务操作SayHello()案例分析 知识宝典之介绍WCF数据契约 图文演示WCF序列化流程 教你两种方法调用WCF服务 新手必看WCF服务元数据介绍 ServiceHost实例是被创建在应用程序域中因此我们必须保证宿主进程在调用服务期间不会被关闭因此我们利用ConsoleRead() 来阻塞进程以使得控制台应用程序能够一直运行直到认为地关闭应用程序如果是Windows应用程序则可以将创建ServiceHost实例的代码放在主窗体的相关代码中保证服务WCF自托管宿主不会被关闭相应地我们需要配置应用程序的nfig配置文件 <configuration> <systemserviceModel> <services> <service name=BruceZhangWCFDocumentsExplorerServiceImplementationDocumentsExplorerService behaviorConfiguration=DocumentExplorerServiceBehavior> <host> <baseAddresses> <add baseAddress=//localhost:/DocumentExplorerService/> </baseAddresses> </host> <endpoint address= binding=basicHttpBinding bindingConfiguration=DocumentExplorerServiceBinding contract=BruceZhangWCFDocumentsExplorerServiceContractIDocumentsExplorerService/> <endpoint address=mex binding=mexHttpBinding contract=IMetadataExchange/> </service> </services> <bindings> <basicHttpBinding> <binding name=DocumentExplorerServiceBinding sendTimeout=:: transferMode=Streamed messageEncoding=Text textEncoding=utf maxReceivedMessageSize=> </binding> </basicHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name=DocumentExplorerServiceBehavior> <serviceMetadata httpGetEnabled=true/> </behavior> </serviceBehaviors> </behaviors> </systemserviceModel> </configuration> 注意配置文件中的服务名必须包含服务契约以及服务类的命名空间此外在配置文件中我通过<baseAddresses>标签为服务添加了基地址因此在endpoint中address为 |