2012-07-03 22 views
1

我有一個問題,如標題中所述。一些背景信息。在WCF .NET 4.0和IIS 6中,如何在沒有HTTP重定向的情況下返回靜態WSDL文件?

有一個像這樣的網址https://external_server.something.xy/SomeService/Something這是通過反向代理暴露於外部世界。

  • 反向代理剝離的HTTPS和流量轉發到 WCF服務作爲純HTTP和HTTPS適用於響應。
  • 該綁定是basicHttpBinding(與<transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />)。

爲此以及一些合同原因,將靜態WSDL文件(Something.wsdl)分發給客戶端。唉,仍然有很多代碼在沒有分佈式靜態WSDL文件的情況下檢索WSDL,然後動態生成調用(無論出於何種原因)。

如果我在<serviceMetadata httpGetEnabled="true" externalMetadataLocation="../Something.wsdl"/>這樣的配置文件中設置,那麼客戶將會受到HTTP 307臨時重定向的歡迎。

無論如何,通過一些研究,我發現設置IIS主機標頭,我相信也會影響同一IIS上的許多其他應用程序。這是一個不可行的解決方案。有什麼我可以在web.config中配置,或者我應該調查服務器上還是反向代理上的URL重寫方案?

作爲一個額外的好處,如果我可以設置幫助頁面上顯示的URL,所以它不顯示內部服務器(以便鏈接也可以!)。

回答

2

爲了回答我自己的問題,我(或我們)在反向代理上重寫了請求,因此它對客戶端和內部服務器都是透明的。現在它將元數據查詢攔截到此服務,並將它們指向靜態WCF文件(通過顯示在幫助頁面中的URI),然後將其返回。

問題是,當我使用externalMetadaLocation標記時,IIS返回了HTTP 307,然後將反向代理中繼到客戶端。當然,內部服務器並不知道外部地址,所以重定向與內部名稱相關,因此也存在問題。

我在想的另一個選擇是編寫一個REST函數來匹配Somethingwsdl Web服務的一部分,因此它不會到達WCF元數據設施。在考慮了這個問題之後,我開始考慮使用IWsdlExceportExtension來完成接收請求的工作,然後只抓取文件並返回它(即沒有重定向)。

2

我們遇到過類似的問題,只需將靜態WSDL放在路由器上(我推測這就是您所說的反向代理),然後關閉服務本身的serviceMetadata。

+0

有點類似的情況。我們最終在逆向代理中編寫了一條匹配元數據查詢的規則。它基本上將請求轉發到外部文件,然後返回。我能想到的另一個「簡單」選項是使用[IWsdlExceportExtension](http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iwsdlexportextension.aspx)。 – Veksi

相關問題