共用方式為


疑難排解例外狀況:System.ServiceModel.Security.MessageSecurityException

 

MessageSecurityException 判斷訊息的安全性並未受保護或是已遭他人修改時,就會擲回 Windows Communication Foundation (WCF) 例外狀況。 這個錯誤通常是在下列所有條件都成立時發生:

  • 在網站或 Web 應用程式專案中,您使用 WCF 服務參考透過遠端桌面連線或終端機服務 (Terminal Service) 這類的遠端連接,與 WCF 服務 (.svc) 通訊。

  • 您沒有遠端站台的系統管理員權限。

  • 遠端站台上 localhost 的要求是由 ASP.NET 程式開發伺服器處理。

相關秘訣

  • 解決使用 ASP.Net 程式開發伺服器時的 NTLM 驗證問題。
    ASP.NET 程式開發伺服器通常會關閉 Windows NT 挑戰/回應 (NTLM) 安全性,以允許匿名存取。 根據預設,在執行終端機服務工作階段或使用遠端連接時,會啟用 NTLM 安全性。 啟用 NTLM 時,所有 localhost 要求都是針對啟動 ASP.NET 程式開發伺服器的使用者或處理序的認證而驗證 (Validate) 的。 這樣會降低安全性威脅。 然而,WCF 也會執行自己的驗證 (Authentication),且不允許系統管理員以外的帳戶使用 WCF 服務。

    如果遠端使用者可能會透過使用 ASP.NET 程式開發伺服器執行網站,同時也會使用 Web 服務或 WCF 服務,您可以建立自訂服務繫結或是關閉 NTLM 安全性。

    System_CAPS_security 安全性 注意事項

     關閉 NTLM 安全性不是建議的方式,並且可能造成安全性威脅。

    如果您建立自訂服務繫結,則仍然受到 NTLM 驗證的保護。

    使用下列步驟,建立 WCF 服務的自訂服務繫結。

    若要為裝載於 ASP.NET 程式開發伺服器內的 WCF 服務建立自訂服務繫結

    1. 開啟產生例外狀況的 WCF 服務的 Web.config 檔案。

    2. 將下列資訊輸入到 Web.config 檔案中。

      <bindings> <customBinding> <binding name="Service1Binding"> <transactionFlow /> <textMessageEncoding /> <httpTransport authenticationScheme="Ntlm" /> </binding> </customBinding> </bindings>
      
    3. 儲存並關閉 Web.config 檔案。

    4. 在 WCF 或 Web 服務的程式碼中,將端點值變更成下列:

      <endpoint address="" binding="customBinding" bindingConfiguration="Service1Binding" contract="IService1" />
      

      這樣可以確保服務會使用自訂繫結。

    5. 在存取服務的 Web 應用程式中,加入服務的參考 (在 [加入服務參考] 對話方塊中,加入服務的參考,方法如同您在產生例外狀況的原始服務一樣)。

    當您使用 WCF 服務參考時,可以遵循下列步驟停用 NTLM 安全性。

    System_CAPS_security 安全性 注意事項

     關閉 NTLM 安全性不是建議的方式,並且可能造成安全性威脅。

    若要關閉 NTLM 安全性

    1. 在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按一下 [屬性頁]。

    2. 選取 [起始選項],然後再清除 [NTLM 驗證] 核取方塊。

    3. 按一下 [確定]。

請參閱

MessageSecurityException
How to: Use the Exception Assistant