我們需要使用C#/ .Net 4.0應用程序中使用Java開發的SOAP 1.1 Web服務。我們無法訪問服務編程或其駐留的服務器。該服務通過非SSL連接提供,並且需要WS-Security,Username/PasswordText。WCF和SOAP WS-Security的問題PlainText用戶名(無SSL)
使用SoapUI(http://soapui.org/),我們可以簡單地通過創建項目,將其指向WSDL並設置簡單的Username/PasswordText WS-Security配置來使用Web服務。
問題是我們無法使用WCF使用Web服務。經過一番研究,我們發現了一些信息,導致我們認爲這個問題可能是SOAP 1.1,WS-Security和wsHttpBinding之間的不兼容。所使用的C#代碼是下面的:
//The WSService.ServiceClient class is generated by the Service Reference
var client = new WSService.ServiceClient();
client.ClientCredentials.UserName.UserName = "Username";
client.ClientCredentials.UserName.Password = "Password";
var response = client.MethodToBeConsumed();
的結合創建如下:
<binding name="GeneratedBinding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
由服務引用創建的綁定是basicHttpBinding的。我們知道我們需要爲WS-Security(SOAP 1.2)使用wsHttpBinding,但由於該服務使用SOAP 1.1,所以這兩個似乎不兼容。
應(如SOAPUI產生的)正確的請求消息:
POST http://server:port/Service HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
Authorization: Basic ENCRYPTEDPASSWORD
User-Agent: Jakarta Commons-HttpClient/3.1
Host: server:port
Content-Length: 324
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:service.version.details">
<soapenv:Header/>
<soapenv:Body>
<urn:methodName>
<arg0>1</arg0>
<arg1>1</arg1>
</urn:method>
</soapenv:Body>
</soapenv:Envelope>
難道真的沒有辦法做到這一點使用WCF?這可以使用customBinding來解決嗎?我們是否可以選擇手工製作標題/消息並解析響應?我是否必須通過非SSL連接來刺激Web服務開發人員使用帶有SOAP 1.1的WS-Security?
感謝您的回覆。我在研究時閱讀了這個問題,最受歡迎的回答建議使用「messageVersion = Soap11WSAddressing10」,但問題仍然存在(與所有其他SOAP11 * messageVersions一樣)。問題是生成的SOAP消息不包含必需的Authorization:Basic xxxx標頭。我正在編輯原始消息以包含由SOAPUI生成的正確消息。 – Luis 2012-03-28 19:20:52