2010-08-11 50 views
6

是否有兩種行爲配置可以有一種服務?如您所知,可以有一個服務和多個端點,您可以在其中指定不同的綁定配置。 但我需要爲相同的服務提供不同的服務行爲。一種服務,兩種行爲配置

如果我嘗試這樣:

<services> 
    <service name="Service.Service1" behaviorConfiguration="Behavior1"> 
    <host> 
     <baseAddresses> 
      ... 
     </baseAddresses> 
    </host> 

    <endpoint ...> 
    </endpoint> 
    </service> 

    <service name="Service.Service1" behaviorConfiguration="Behavior2"> 
    <host> 
     <baseAddresses> 
      ... 
     </baseAddresses> 
    </host> 

    <endpoint ...> 
    </endpoint> 
    </service> 
</services> 

...我得到錯誤

我知道「命名爲相同的密鑰‘服務’在同一配置範圍中已存在的兒童元素」我可以創建繼承原始服務類的新類,但有更好的解決方案嗎?

回答

2

似乎應該用另一個服務名稱註冊相同的服務類。服務行爲是服務配置的一部分,所以如果你想使用不同的行爲,你應該配置不同的服務。我對你的問題:如果你將有兩種行爲的服務,wcf將如何決定使用這個或另一個? 爲什麼你用繼承的解決方案不好?

+0

「如果你將有兩種行爲的服務,wcf將如何決定使用這個或另一個?」 - 可能由不同的基地地址? 「你爲什麼用繼承解決不好?」 - 我已經有了幾個實時服務,如果我只能通過更改配置來實現所需的更改,那就太好了。第二件事是,在這種情況下,我將有兩個類別完全相同,只是爲了實現配置需要。 – Mijalko 2010-08-11 08:18:04

1

頗耐人尋味的問題...我什麼,如果我所描述的是可能的,但解決辦法是有的東西像下面我不能肯定:

  1. 選擇服務不同的名稱 - 會有一些方案,比如姓名=「Service.Service1.Entry1」
  2. 編寫定製的ServiceHost(可能與IInstanceProvider結合),它將忽略最後的.Entry1部分並使用Service.Service1名稱創建服務實例。

另一種方式是在應用程序初始化時注入從Service.Service1繼承的名爲「Service.Service1.Entry1」的動態類型。這部分是非常有可能的 - 即對於每個提到的服務,您都會在應用程序啓動時動態創建n個子類型,以便您可以按預期使用它們。