2011-05-17 83 views
-2

我正在嘗試爲我正在編寫的WCF應用程序設置消息級安全性。該應用程序已經有一個使用傳輸級別安全設置的端點。我可以設置另一個具有消息級別安全性的端點嗎?順便說一句,這個應用程序是通過IIS運行的。我設置了一個單獨的服務中,像這樣相同的配置文件...消息級別在同一個WCF配置文件中的安全性和傳輸級別安全性

<service name="generalName"> 
    <endpoint address=...> 
    . 
    . 
    . 
</service> 
<service name="generalName2"> 
    <endpoint address=""...> 
</service> 

我之所以問這個是因爲我覺得我已經設置好一切,我認爲它可以工作。但是,當我嘗試訪問以前的服務我得到以下錯誤...

安全設置該服務 要求Windows身份驗證,但它 沒有爲承載此服務的IIS應用程序啓用 。

我知道以前的服務有效,因爲我可以在設置第二個服務之前訪問它。

對我有何建議?我應該嘗試在這裏寫一個完全獨立的服務,還是有辦法解決這個問題?

+0

你正在使用哪個**綁定? – 2011-05-17 16:20:18

回答

3

不知道你使用什麼綁定 - 取決於綁定是否支持傳輸和消息安全 - 當然,你應該能夠公開兩個端點,一個使用傳輸安全性,另一個使用消息安全性。

由於這是真的只有一個服務有兩個端點,你的配置應該是這個樣子(我拿起wsHttpBinding爲我的樣本 - 適應需要的話):

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="TransportSec"> 
      <security mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
      </security> 
     </binding> 
     <binding name="MessageSec"> 
      <security mode="Message"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 

    <services> 
     <service name="YourService" > 
     <endpoint name="Transport" 
       address="Transport" 
       binding="wsHttpBinding" 
       bindingConfiguration="TransportSec" 
       contract="IYourService" /> 

     <endpoint name="Message" 
       address="Message" 
       binding="wsHttpBinding" 
       bindingConfiguration="MessageSec" 
       contract="IYourService" /> 
     </service> 
    </services> 
    </system.serviceModel> 

基本上,你定義兩個結合配置,然後您有一個服務的兩個端點,一個使用傳輸安全綁定配置,另一個端點使用消息安全綁定配置。

那兩個端點當然不能有相同的地址 - 所以你需要給每個端點分配兩個(相對)地址。

+0

還請記住配置IIS以禁用匿名訪問並僅啓用Windows身份驗證,因爲@marc_s示例要求將Windows身份與每個服務請求一起傳遞。 WCF客戶端將自動提供Windows標識,因此您不需要更改配置文件以外的任何內容。 – 2011-05-17 16:30:06

+0

@Sixto Saez:這只是我的猜測 - wsHttpBinding還支持傳遞客戶端憑證的其他方式 - 如用戶名或證書等。 – 2011-05-17 16:31:13

+0

對,我也猜測基於我在問題中看到的異常。謝謝! – 2011-05-17 16:40:53