2010-04-09 57 views
1

我有一堆自託管的WCF服務。一切工作正常,但我正在尋找方法來規範化/簡化結果配置。我儘可能簡化了它,但我仍然不高興。目前,我的配置看起來像這樣:簡化WCF配置

<system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
      <binding name="BindingConfiguration" ...> 
       ... 
      </binding> 
     </netTcpBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       ... 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="Name1"> 
      <endpoint address="net.tcp://localhost:8080/name1" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract1"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </service> 
     <service behaviorConfiguration="ServiceBehavior" name="Name2"> 
      <endpoint address="net.tcp://localhost:8080/name2" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract2"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </service> 
     ... 
    </services> 
</system.serviceModel> 

總之,我有6個服務,所以它是重複的。理想情況下,我想:

  • 要指定「localhost:8080」只有一次,所有服務之間共享,只有指定的差異(「名稱1」或「NAME2」)
  • 只有指定的身份信息一次和所有服務定義之間共享

我的第一點,我知道base addresses,但只適用於服務級別,而不是跨單獨的服務。至於我的第二點,我嘗試將身份信息轉移到端點行爲中,但似乎並不支持。

有什麼我可以做的簡化這個配置?或者是我唯一的選擇切換到基於代碼的配置方法?

回答

1

不幸的是,正如你注意到自己 - 基地址概念只在每個服務級別上 - 所以如果你有一個給定服務的端點很多,那麼你可以使用它。

您真正需要的唯一選擇是使用一些其他方法來配置您的基地址,然後使用它在代碼中創建服務端點。如果您自行託管服務,則可以在您的主機代碼中執行此操作,然後再致電ServiceHost.Open() - 如果您在IIS中託管,則必須創建您自己的自定義ServiceHostFactory,它執行所有此設置,然後使用該自定義服務主機工廠在IIS中創建您的服務主機。

無論是可行的有管理的努力 - 問題是,這是值得的麻煩你,但我們不能決定你的地方...

+0

無賴 - 害怕這一點。不管怎麼說,還是要謝謝你。 – 2010-04-09 13:00:14