2011-07-18 26 views
0

我在.NET 4.0上,我有一個wcf服務,它實現兩個合同,一個保護級別和一個沒有保護。兩者都在Action和ReplyAction中指定「*」值。WCF服務配置奇怪的行爲 - 請求消息必須保護

現在,如果我在Web站點項目中配置此服務一切正常,但如果我在Web應用程序項目中配置相同的服務,如果我嘗試在瀏覽器中查看默認端點的服務頁面, ('IContractSigned','http:// myservice/contracts')必須保護這個請求消息,這個保護必須由綁定提供('BasicHttpBinding','http ://tempuri.org/')。「

網站項目和Web應用程序項目都具有相同的web.config。

現在我試圖投資,但不可能找到簡單的解決方案或討論。 有什麼想法? 爲什麼項目類型以這種方式影響配置的正確性? 在此先感謝

回答

1

服務合約的EncryptAndSign保護級別要求綁定提供某種加密和唱歌的方式,即綁定必須是安全的。

也許您的服務使用傳輸級別的安全性,依靠IIS來保護其服務器證書之一的通道安全?網站部署和Web應用程序部署之間的區別可能是IIS使用服務器證書保護通道的能力。

如果您使用消息模式安全性,您的服務必須聲明使用哪個證書,並且它應該如何部署服務應該沒有任何區別。

0

我用同樣的異常,並found this掙扎:

當有在合同上沒有明確指定保護級別和底層綁定支持安全性(無論是在運輸或消息級別),有效保護水平對於整個合同是ProtectionLevel.EncryptAndSign。如果綁定不支持安全性(例如BasicHttpBinding),則整個合同的有效System.Net.Security.ProtectionLevel爲ProtectionLevel.None。結果是,根據端點綁定,即使合同指定ProtectionLevel.None,客戶端也可能需要不同的消息或傳輸級安全保護。

因此,如果您沒有在ServiceContract屬性中指定ProtectionLevel,WCF將根據您的web.config定義ProtectionLevel。如果您使用例如Ws2007和BasicHttpBinding,BasicHttpBinding將會失敗並顯示您的異常。然後你有3個選項:

  1. 刪除您的合同的所有安全綁定,只留下BasicHttpBinding。合同
  2. 設置的保護級別,其通過暴露basicHttpBinding的,因爲這:

    [的ServiceContract(的ProtectionLevel = ProtectionLevel.None)]

  3. 提供一些安全basicHttpBinding的。