C#/ .Net 4.0アプリケーションからJavaを使用して開発されたSOAP 1.1 Webサービスを使用する必要があります。私たちはサービスプログラミングやそれが存在するサーバーにアクセスすることはできません。サービスは非SSL接続で公開され、WS-Security、Username/PasswordTextが必要です。WCFおよびSOAP WSセキュリティの問題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を使用するため、これらの2つは互換性がないようです。
正しい要求メッセージは、(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接続を介してSOAP 1.1でWS-Securityを使用するためのWebサービス開発者を援助する必要がありますか?
ありがとうございます。調査中にその質問を読んだところ、最も一般的な回答は "messageVersion = Soap11WSAddressing10"を使用するようにアドバイスしますが、問題は残ります(他のすべてのSOAP11 * messageVersionsも同様です)。問題は、生成されたSOAPメッセージに必要なAuthorization:Basic xxxxヘッダーが含まれていないことです。元のメッセージを編集して、SOAPUIによって生成された正しいメッセージを含めます。 – Luis