3

メッセージに次のようなものを追加する必要があります。

  <soap:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soap:mustUnderstand="1">
      <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="unt_Z1k4LnxEmBzzKuPP">
        <wsse:Username>user</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">iNs+LF1iwwPU2AMer8uU6NKY9tfzgYqMTaP3mIEgoK0=</wsse:Nonce>
        <wsu:Created>2012-04-22T11:57:30Z</wsu:Created>
      </wsse:UsernameToken>
      <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsu:Created>2012-04-22T11:57:30Z</wsu:Created>
        <wsu:Expires>2012-04-22T11:58:30Z</wsu:Expires>
      </wsu:Timestamp>
    </wsse:Security>
  </soap:Header>

私は 500 エラー応答を返す Web サービスを呼び出しています。これは基本的に認証できないことを意味します。メッセージに認証ヘッダーがあっても、メッセージからこれらの情報が欠落していると思います。これは起こり得ますか?

メッセージに WS-Security ヘッダーを追加し、これらすべての情報をコードに追加するにはどうすればよいですか? Visual Studio で [Web 参照の追加] を使用してサービスを追加しました。

ありがとうございました。

4

1 に答える 1

2

最も洗練された解決策は、.NET 3.5 から .NET 2.0 への呼び出しに使用するクラス ライブラリを作成し、WSE 3.0 をインストールし、いくつかの VS 構成ファイルをハッキングしてアドインを機能させ、クラス ライブラリを有効にすることに関する古い解決策です。プロジェクトを WSE 対応プロジェクトとして。

Update Web Reference は、2 つのプロキシ クラス (Myservice と MyServiceWse など) を作成します。1 つは、WCF プロキシ生成の既定である SoapHttpClient から継承し、最新のものは WebServicesClientProtocol から継承します。

最新のものは、WS-Security ヘッダーを使用して古い ASMX Web サービスを呼び出すために必要なものです。

残りはとても簡単です:

MyServiceWse client = new MyServiceWse();

        UsernameToken token = new UsernameToken(userName, password, PasswordOption.SendPlainText); // or what service specs rquired, other than plaintext.

        client.RequestSoapContext.Security.Tokens.Add(token);
        client.RequestSoapContext.Security.Timestamp.TtlInSeconds = 60;

        client.YourMethod(); 

Microsoft が VS 2005 以降に含まれていない廃止された API は非常にシンプルであり、シリアライズ前、シリアライズ後、拡張機能などを使用して、ストリームと文字列操作でメッセージをキャッチする必要があります...

古い W​​eb 参照の追加と WSE ではなく、参照の追加を使用してこれに対する解決策がある場合は、WS-Security ヘッダー、UsernameToken、TimeStamp Created、Expired などを使用して簡単な呼び出しを行います。

私にお知らせください。

PSこの質問に対する解決策を見つけて、いくつかの便利なリンクで答えてください。

ヘッダー セキュリティを使用した C# での asmx 以外の SOAP 1.1 Web サービスの使用

于 2012-04-24T08:25:32.647 に答える