2012-05-02 5 views
3

Java/Axisクライアントで消費されているusernameToken認証を持つWCF4サービスを開発しました。WCF応答のMustUnderstand属性により、Java/Axisクライアントでエラーが発生する

私はリクエストのボディは、このようなルックスに来ていることがわかります...

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
    <wss:Security xmlns:wss="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wss:UsernameToken> 
     <wss:Username>username</wss:Username> 
     <wss:Password>password</wss:Password> 
     </wss:UsernameToken> 
    </wss:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
    {snipped} 
    </soapenv:Body> 
</soapenv:Envelope> 

、我々はこのようなルックスを戻ってきている応答...

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Header> 
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <u:Timestamp u:Id="_0"> 
     <u:Created>2012-05-02T01:23:12.711Z</u:Created> 
     <u:Expires>2012-05-02T01:28:12.711Z</u:Expires> 
     </u:Timestamp> 
    </o:Security> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    {snipped} 
    </s:Body> 
</s:Envelope> 

問題がありますレスポンスでs:mustUnderstand = "1"属性。これにより、Java/Axisクライアントで「確認が失敗しました」というエラーが発生しています。

誰かがこのs:mustUnderstand属性を削除するためにWCFを設定する方法を知っているか、少なくとも「1」ではなく「0」に設定していますか?

+0

は、このヘルプのでしょうか? http://stackoverflow.com/questions/3551738/how-to-modify-a-wcf-message-headers-mustunder-using-clientinspector – Chris

+1

セキュリティ設定は何ですか?タイムスタンプを設定から削除すると、問題が解決する可能性があります。そうしないと、カスタムメッセージエンコーダーを実装してヘッダーを変更する必要があります。 –

答えて

1

この相互運用性の問題を克服するために私たちが思いついた解決策は、カスタムバインドに変更してincludeTimestamp = "false"属性を指定することでした。これを行うことで、タイムスタンプ(CreatedとExpired)はレスポンスに追加されず、すべての問題を引き起こしていたmustUnderstand属性を含むセキュリティヘッダー全体が消え去ってしまいました。

<customBinding> 
    <binding name="customBindingConfig"> 
     <security authenticationMode="UserNameOverTransport" includeTimestamp="false" /> 
     <textMessageEncoding messageVersion="Soap11" /> 
     <httpTransport /> 
    </binding> 
</customBinding> 

ので、応答は今、単純に次のようになります...

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     {snipped} 
    </s:Body> 
</s:Envelope> 
+0

サービスのservice.xmlにタイムスタンプが表示されましたか? –

+0

@Brian、分かりません。私は数ヶ月前に会社を辞めましたので、ソースコードにアクセスできません - ごめんなさい! – barrylloyd

関連する問題