Visual Studio 2010で、WSDLを使用してプロキシクラスを自動作成するWebサービスを使用するクライアントを作成しました。開発環境では、この環境で認証する必要がないため、問題なく機能しています。
私が抱えている問題は、サービスがテストおよび実稼働(実際の動作)環境で認証されていることです。WSDLはそれを記述していません。どちらも同じ開発環境のWSDLを使用しています。
テスト環境でブラウザを使用してWSDLを表示しようとすると、エンドポイントアドレスの後に「?WSDL」を付けても、開発環境のようにWSDLが返されません。認証フォームと通常のhtmlを返し、ユーザーとパスワードを通知した後、WSDLを返します(開発環境と同じ)。
app.configバインディング構成を次のように作成しました。
<wsHttpBinding>
<binding name="WebServiceSoapAuth" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<security mode="None">
<transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</wsHttpBinding>
VS 2010によって自動的に作成された(開発環境で動作する)basicHttpBindingを使用すると、サービスコンシューマーは、期待どおりに「セキュリティトークンを認証または承認できませんでした」と返します。
wsHttpBinding(上記のコード)に変更すると、「応答メッセージのコンテンツタイプtext / html; charset = utf-8がバインディングのコンテンツタイプ(application / soap + xml; charset = utf-8)と一致しません。カスタムエンコーダーを使用する場合は、IsContentTypeSupportedメソッドが正しく実装されていることを確認してください。応答の最初の1024バイトは、「」の後にフォーム認証のhtmlコードが続きます。
使用する必要のあるバインディング構成がわかりません。
SoapUIを使用してサービスの消費をテストし、両方の環境で機能します。認証を使用して機能するには、ユーザーとパスワードを通知するだけで、「WSS-PasswordType」リクエスト構成を「PasswordText」(ユーザーのみに通知)に変更する必要がありました。とパスワード私は「セキュリティトークンを認証または承認できませんでした」というリターンがあります)。
私の悪い英語については申し訳ありません、私は流暢ではありません、そして私が質問のカテゴリーまたはそれをフォーマットすることでいくつかの間違いをしたならば。
編集:認証のある環境でwsdlファイルを視覚化できません。アドレスの後に?WSDLを入力すると、wsdlではなく、認証用のフォーム(Ensemble InterSystemsソフトウェアのフォーム)が表示されます。
SoapUIを使用してサービスの消費をテストし、両方の環境で機能します。認証を使用して機能するには、ユーザーとパスワードを通知するだけで、「WSS-PasswordType」リクエスト構成を「PasswordText」(ユーザーのみに通知)に変更する必要がありました。とパスワード私は「セキュリティトークンを認証または承認できませんでした」というリターンがあります)。
自動生成されたクラスを使用して機能せず、ユーザーに通知して渡すだけで機能しないのはなぜですか?誰かが考えを持っていますか?SoapUI構成の「WSS-PasswordType」が「PasswordText」に等しいバインディング構成はどれですか?(これが、ユーザーとパスワードを通知するだけでは機能しない理由の鍵だと思います)
編集2:石鹸メッセージの本文は大丈夫です。ヘッダーの作成に問題があります。それは次のようなものかもしれません:
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-5">
<wsse:Username>USERNAME</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">E1XqZ2v8IDaTBzfF3j/TOA==</wsse:Nonce>
<wsu:Created>2012-12-21T12:24:23.380Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
私が言ったように、私はサーバーにアクセスできません、それは私の顧客にあります。私はそれがJavaで作られていることを知っています。