2012-03-28 26 views
3

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サービス開発者を援助する必要がありますか?

答えて

0

これはあなたを助けている場合を参照してください(WSHttpBindingが使用されるが、SOAP 1.1と互換性の要求を行うように言わ):で説明したように

Does WCF support WS-Security with SOAP 1.1?

+0

ありがとうございます。調査中にその質問を読んだところ、最も一般的な回答は "messageVersion = Soap11WSAddressing10"を使用するようにアドバイスしますが、問題は残ります(他のすべてのSOAP11 * messageVersionsも同様です)。問題は、生成されたSOAPメッセージに必要なAuthorization:Basic xxxxヘッダーが含まれていないことです。元のメッセージを編集して、SOAPUIによって生成された正しいメッセージを含めます。 – Luis

関連する問題