學習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為
From:http://tw.wingwit.com/Article/program/net/201311/11274.html