2009-12-15 189 views
3

WCF服務和客戶端可以共享關於綁定等的相同設置(來自同一個配置文件)。無論在哪裏?換句話說,我可以編寫單個綁定部分並放入任何內容,並確保它對服務和客戶端有好處嗎?在服務和客戶端之間共享WCF設置

我會解釋得更好。 我有一個配置文件是這樣的:

<services> 
    <service name="TestClass1"> 
    <endpoint binding="basicHttpBinding" address="http://dev00:4322/host1/TestApplication1" contract="myApp.Interface.ITestApplication"/> 
    <endpoint binding="netTcpBinding" bindingConfiguration="Binding1" address="net.tcp://dev00:4321/host1/TestApplication1" contract="myApp.Interface.ITestApplication"/> 
    <endpoint binding="netNamedPipeBinding" address="net.pipe://localhost/host1/TestApplication1" contract="myApp.Interface.ITestApplication"/> 
    </service> 

    <service name="ManagementClass1"> 
    <endpoint binding="netNamedPipeBinding" address="net.pipe://localhost/host1/ManagementApplication1" contract="myApp.Interface.IManagementApplication"/> 
    <endpoint binding="netTcpBinding" bindingConfiguration="Binding1" address="net.tcp://dev00:4321/host1/ManagementApplication1" contract="myApp.Interface.IManagementApplication"/> 
    </service> 
</services> 

<client> 
    <endpoint name="clientTestClass1Tcp" 
     address="net.tcp://dev00:4321/host1/TestApplication1" 
     binding="netTcpBinding" 
     bindingConfiguration="Binding1" 
     contract="myApp.Interface.ITestApplication"/> 

    <endpoint name="clientManagementClass1Tcp" 
     address="net.tcp://dev00:4321/host1/ManagementApplication1" 
     binding="netTcpBinding" 
     bindingConfiguration="Binding1" 
     contract="myApp.Interface.IManagementApplication"/> 
</client> 

<bindings> 
    <netTcpBinding> 
    <binding name="Binding1" 
     closeTimeout="00:00:10" 
     openTimeout="00:00:10" 
     receiveTimeout="00:01:00" 
     sendTimeout="00:01:00" 
     transactionFlow="false" 
     transferMode="Buffered" 
     transactionProtocol="OleTransactions" 
     hostNameComparisonMode="StrongWildcard" 
     listenBacklog="10" 
     maxBufferPoolSize="524288" 
     maxBufferSize="65536" 
     maxConnections="30" 
     maxReceivedMessageSize="65536"> 
     <security mode="None"> 
     <transport clientCredentialType="None" /> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 

不是所有是我的控制之下。 我可以肯定,共享服務和客戶端之間的綁定(和其他部分),無論寫入什麼,在服務和客戶端都一切順利嗎?

回答

4

是的,你可以 - 在一定程度上:

  • 把你綁定,行爲,擴展信息到單獨的配置文件
  • 參考那些從客戶端和您的應用程序的服務器部分都

iee把你的綁定在bindings.config

<?xml version="1.0" encoding="utf-8"?> 
<bindings> 
    <basicHttpBinding> 
    <binding name="Default" useDefaultWebProxy="false"> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Basic" 
        proxyCredentialType="None" realm="" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

,然後從您的服務的app.config或web.config中引用文件:

<system.serviceModel> 
    <bindings configSource="bindings.config" /> 
</system.serviceModel> 

的Visual Studio會抱怨 「configSource」 - 但請相信我,有用。這是用於驗證的Visual Studio XML模式中的一個缺陷 - 但該功能起作用。這實際上適用於您的web.config/app.config中的任何配置節(但不適用於配置節組)。

您可以對<system.serviceModel>配置組的任何「小節」 - 客戶端,服務器,行爲,擴展名進行命名。

Marc

-1

是的。這是我使用的(簡化的)app.config文件。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <client> 
      <endpoint name="MyServiceClient" 
       address="net.pipe://localhost/MyService" 
       contract="IMyService" 
       binding="netNamedPipeBinding" /> 
     </client> 
     <services> 
      <service name="MyService"> 
       <endpoint name="MyService" 
        address="net.pipe://localhost/MyService" 
        contract="IMyService" 
        binding="netNamedPipeBinding" /> 
      </service> 
     </services> 
    </system.serviceModel> 
</configuration> 
0

,如果你在兩端控制代碼的另一種選擇是從您從自己的配置文件中讀取服務器的名稱做整個配置中的代碼分開。

然後,您可以在客戶端和服務器中使用該程序集;當您使用共享程序集(而不是生成的代理類)來定義WCF接口時,這可以很好地工作。

相關問題