2012-11-04 26 views
1

我有一個WCF服務要在.NET中使用。按照要求,標題中的Action元素必須爲「http:// abc」,並且To元素必須爲「ws:// xyz」以便服務識別並響應請求。但是,該操作的soapAction在WSDL中是空白的,並且不能更改。WCF消息:協議在To元素更改

編程建我的服務配置是這樣的:

  • 短信編碼與Soap11信封版本綁定和WSAddressing10尋址版本
  • 沒有安全伺機
  • HTTP傳輸綁定

的設置我發現在BeforeSendRequest中使用「ws:// xyz」作爲端點URL和Request.Headers.Action設置爲「http:// abc」使用附加到端點的端點行爲添加消息檢查器。然後,我還附加了一個ClientViaBehavior,其URL爲「http:// abc」。

在我的機器這將導致所需

<a:Action>http://abc</a:Action> 
<a:To>ws://xyz</a:To> 

但是在測試服務器上它產生

<a:Action>http://abc</a:Action> 
<a:To>http://xyz</a:To> 

我不知道服務器的具體配置,但我相信這是在Windows服務器就像我的開發箱一樣。相同的代碼是否會在兩臺不同的機器上生成不同的消息,或者我會如何實現?我也應該說它在幾個星期內運行良好,並在上週一停止。

我在後面發現了以下內容: 測試服務器上有.NET 4.5以及另一臺機器,我試過它(也失敗了)。它的工作正常的開發機器上只有.NET 4.0,這將表明它可能與它有關。但是我沒有證據表明它是由.NET 4.5引起的,因爲它在問題出現前幾周安裝完畢。而且,自從它停止工作以來,一直沒有Windows更新! 我也嘗試在我的ClientMessageInspector實現中設置To元素,但協議仍然被翻轉爲http。

回答

0

我認爲BeforeSendRequest未被調用,因爲您的服務綁定錯過了配置。檢查是否已將擴展配置添加到您希望具有該行爲的服務端點。

+0

它確實被調用,因爲消息包含我在BeforeSendRequest中添加的其他頭文件。這種方式的擴展配置是什麼? – David