2013-06-25 79 views
0

我們有一個由一側一個WCF Web服務,而在另一側的智能客戶端的解決方案。WCF通過HTTPS - >代理 - > HTTP

通常情況下,我們成立了HTTPS在Web服務器上的web服務,以便客戶端和服務器之間的通信發生了HTTPS。

我們的一個客戶但是有一個代理服務器之間,從他們的SSL負載條傳入HTTPS請求,並轉發普通HTTP請求到Web服務器:

客戶端> HTTPS>代理> HTTP> Web服務器

問題是我們使用WsHttpBinding來允許我們通過SSL與WCF進行通信。通常,我們在客戶端和服務器上使用該綁定,並且沒有問題。

但由於Web服務實際收到的HTTP請求,我們不能使用的WSHttpBinding(需要HTTPS)。但是我們必須使用客戶端的HTTPS。

當然不過,WCF要求客戶機和服務器之間相匹配的綁定。所以,我們有點卡住,我不能找到解決這個問題的好辦法:

  • 我們不能將客戶端設置爲使用HTTP出於安全原因
  • 我們可以設置服務接受HTTP請求,但客戶端將無法與之通信。

有一定的設置,可以覆蓋這個要求?

+0

您是如何確保請求到達Web服務器的,並且它沒有HTTPS但HTTP?當你說智能客戶端時,它是什麼?一個瀏覽器或其他東西? – Anu

+0

那麼,我可以看到Web服務器通過HTTP進入的請求,我還可以在WCF日誌中看到報告錯誤的URL,即HTTP。此外,代理服務器的人確認HTTPS被剝離爲HTTP並通過HTTP轉發到網絡服務器。智能客戶端是使用ClickOnce部署的.NET Windows窗體應用程序。所以它是連接到WCF服務的Windows窗體應用程序。 – Aaron

回答

0

使用wcf binding converter獲得自定義您的wsHttpBinding綁定。然後將自定義綁定從https更改爲http元素。

+0

謝謝,我會在嘗試完成後給您反饋。已經有一些問題:我是否在客戶端和服務上使用這種自定義綁定?然後,我將客戶端設置爲HTTPS並將服務設置爲HTTP? (似乎可能不起作用)。我無法將客戶端設置爲HTTP,因爲它們拒絕傳入的HTTP連接,另外我認爲我的自定義用戶名/密碼將可讀(使用帶有自定義成員資格提供程序的用戶名憑證類型)。 – Aaron

+0

僅在服務中使用它,因爲客戶端已經很好。客戶端保留https和服務http。這將工作,因爲你有一個在卸載SSL的中間服務。 –

+0

它現在抱怨說:「合同被配置爲需要傳輸級別完整性和機密性的身份驗證模式,但傳輸不能提供完整性和機密性。」這是因爲身份驗證模式爲UserNameOverTransport。我不確定我可以使用哪個其他選項,因爲在客戶端我們使用UserName身份驗證(http://msdn.microsoft.com/zh-cn/library/aa751836.aspx)。 – Aaron