我認爲你得到一個HTTP 400(錯誤請求)的原因是你的服務使用的是SOAP 1.1的BasicHttpBinding
,而且你最可能發送一個SOAP 1.2消息(正如你在評論中指出的那樣使用SOAP 1.2)。這兩種消息格式不同。
最簡單的解決方案是使用SOAP 1.1,但是如果您必須(或想要)使用SOAP 1.2,以下可能會有所幫助。
在您的配置文件中,您尚未定義任何端點或綁定 - 這是正常的,因爲WCF將在4.0和更高版本中使用默認值。
但是,HTTP的默認綁定是BasicHttpBinding
。您需要使用支持SOAP 1.2的綁定(或將您的消息更改爲SOAP 1.1)。您可以使用WSHttpBinding
,它支持SOAP 1.2,但是您必須更改安全設置(默認情況下它是Windows)。
另一種選擇是使用實現SOAP1.1的自定義綁定。我會舉幾個例子(我從來沒有寫過一個WCF服務的非.NET客戶端,所以我不能肯定地說它會起作用,但它至少應該讓你進入正確的方向
WsHttpBinding的
變化在你的配置文件重寫協議映射的默認協議映射爲HTTP請求從BasicHttpBinding
到WsHttpBinding
:
<protocolMapping>
<addBinding protocol="wsHttpBinding" scheme="http" />
</protocolMapping>
向您的配置文件添加綁定部分,以便您可以將安全模式設置爲無。這正好下<system.serviceModel>
部分:
<bindings>
<wsHttpBinding>
<binding>
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
注意,我並沒有在綁定的name
屬性設置的值。這會將綁定定義設置爲默認值,並且將HTTP的默認協議更改爲wsHttpBinding
可使您發送SOAP 1.2。
安全注意事項*如果您只是想更好地瞭解SOAP,那麼將安全設置爲none就沒有問題,但我強烈建議在生產環境中使用它。
自定義綁定
我從來沒有使用自定義綁定,但這樣的事情應該工作:
<bindings>
<customBinding>
<binding name="Custom">
<textMessageEncoding messageVersion="Soap12" />
<httTransport />
</binding>
</customBinding>
</bindings>
您需要明確地將它設置爲您的端點(使用bindingConfiguration
屬性),這意味着您需要在配置文件中創建一個端點定義。
自定義綁定的想法是從SOAP 1.2 message format with BasicHttpBinding
希望這會給你一些想法,讓你再次去。
來源
2013-04-28 18:48:54
Tim
什麼是WCF服務的綁定,以及您使用哪個版本的SOAP? WCF對SOAP 1.1使用'basicHttpBinding' - 所有其他人(我相信)都是1.2。 – Tim 2013-04-28 05:07:06
我們使用SOAP 1.2,但我不確定我們正在使用的綁定。 BasicHttpBinding是我想要的場景 – anguyen 2013-04-28 05:44:14
經過快速檢查後,配置文件確實指定我們使用basicHttpBinding''protocolMapping> protocolMapping >' 或者這不是指定綁定的正確方法嗎? –
anguyen
2013-04-28 06:00:21