WCF分布式開發常見錯誤(27):Secure channel cannot be opened because security negotiation with the remote endpoint has failed
這個問題是在調試WCF分布式安全開發實踐(12):消息安全模式之自定義X509 證書驗證:Message_CustomX509Certificate_WSHttpBinding 。發現並提出來的 ,我幫助調試,找到了問題的解決辦法。發出來一起分享給大家。
【1.問題描述】:
1.項目類型:IIS托管的WCF服務。
2.安全類型:消息安全模式+ 自定義X509證書驗證。+WSHttpBinding :Message_CustomX509Certificate_WSHttpBinding
3.客戶端類型:ASP.NET 網站。
4.錯誤信息:Secure channel cannot be opened because security negotiation with the remote endpoint has failed. This may be due to absent or incorrectly specified EndpointIdentity in the EndpointAddress used to create the channel. Please verify the EndpointIdentity specified or implied by the EndpointAddress correctly identifies the remote endpoint.
安全通道無法打開,因為安全與遠程終結 點協商已經失敗。這可能是由於在EndpointAddress 缺少或不正確指定用於創建 通道的EndpointIdentity。請驗證EndpointIdentity指定或暗示的 EndpointAddress正確標識遠程終結點。
5.錯誤截圖:
【2.問題分析】:
導致這個問題的可能原因有2個:
(1)沒有服務端配置安全選項。
(2)服務沒有啟動。
網上的同樣的問題也很多,但是沒有什麼幫助。這裡針對2個Web類型的應用 項目。在調試的時候容易出現這樣的問題。
【3.解決方案】:
原因(1):
檢查服務配置,證書設置:
<wsHttpBinding> <binding name="MyBindingConfigration"> <security mode="Message"> <transport clientCredentialType="None"/> <message clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding>
原因(2):由於一個解決方案裡包含2個項 目,所以要保證服務啟動。步驟如下:
這個問題的關鍵在於,你雖然設置了證書,這裡錯誤提示是,與服務終結點 協商失敗,原因不是證書。
是整數標識的服務,沒有啟動,導致協商錯誤。你右鍵-》Debug->啟動新 的實例,先把服務啟動。
然後在右鍵-》Debug->啟動新的客戶端項目實例。這樣單步調試就通過了 。
我把證書名稱換為我本機的證書,你記得根據自己的證書名稱修改配置文件 。
參考鏈接:
http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/f1d4e572- 5871-48da-8dc3-8195a42f7c94