21

SOAP 1.2 を使用して AJAX 経由でこのサービスに接続する WCF Web サービスと JavaScript クライアントがあります。私がしたいのは、「新しいプロキシを開始する」のチェックを外して、WCF テストクライアントで行うのと同じように 、AJAX SOAP 呼び出しに1 つのプロキシのみを使用するように指示するパラメータを渡すことです。画像

これが私の SOAP AJAX 呼び出しです。

DoSoapAjax: function (soapMethodName, data, successHandler, errorHandler, isAsync, currentInstance) {
    var service = this;
    var soapResult    = soapMethodName + "Result";
    var soap12WithWsHttpBindRequest ='<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">' +
                      '<s:Header>' +
                      '<a:Action s:mustUnderstand="1">' + this.serviceContractNamespace + '/' + this.interfaceName + '/' + soapMethodName + '</a:Action>' +
                      '<a:MessageID>urn:uuid:605ea0c6-d09b-46bf-b61d-e61b377a135b</a:MessageID>' +
                      '<a:ReplyTo>' +
                      '<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>' +
                      '</a:ReplyTo>' +
                      '<a:To s:mustUnderstand="1">' + this.tenantAdminService + '</a:To>' +
                      '</s:Header>' +
                      '<s:Body>';
                      if (data == emptyString)
                      {
                        soap12WithWsHttpBindRequest +=
                      '<' + soapMethodName + ' xmlns="' + this.serviceContractNamespace + '" />';
                      }
                      else
                      {
                        soap12WithWsHttpBindRequest +=
                      '<' + soapMethodName + ' xmlns="' + this.serviceContractNamespace + '">' +
                      data +
                      '</' + soapMethodName + '>';
                      }
                       soap12WithWsHttpBindRequest +=
                      '</s:Body>' +
                      '</s:Envelope>';
    // in order for ajax to work on jQuery 1.8.2 we need to enable the following.
    // found this answer on the link : http://stackoverflow.com/questions/9160123/no-transport-error-w-jquery-ajax-call-in-ie
    $.support.cors = true;
    // variable to save successData
    var responseData = null;
    // SOAP 1.2 query
    var response = $.ajax({
              type: "POST",
              url: this.tenantAdminService,
              data: soap12WithWsHttpBindRequest,
              contentType: "application/soap+xml",
              dataType: "xml",
              processData: false,
              async: isAsync,
              success: function (data, status, xmlHttpRequest) {
                responseData = data;
                // inserting all data results into dictionary
                var responseResults = {};
                // delegating success function
                if (successHandler != null)
                {
                    responseResults = service.ParseResponse(soapMethodName, data);
                    successHandler(responseResults, currentInstance);
                }                
              },
              error: function (xmlHttpRequest, textStatus, errorThrown) {
                  if (errorHandler != null)
                  {
                    errorHandler(xmlHttpRequest, textStatus, errorThrown, currentInstance);
                  }
                  else if (!isAsync)
                  {
                    alert("Error : " + errorThrown);
                    alert("Error Description : " + xmlHttpRequest.responseText);
                  }

                  return;
              }
          });

        if (!isAsync)
        {   
            return service.ParseResponse(soapMethodName, response.responseXML);
        }
    }  
4

3 に答える 3

1

これに対する具体的な答えがわからないことから始めますが、私のアプローチは、WFC テスト クライアントからのトラフィックを盗聴して、要求ヘッダーに追加できる呼び出しにパラメーターが追加されているかどうかを確認することです。あなたのAJAX呼び出しで。

Fiddlerはその仕事をするかもしれませんが、それがすべての http トラフィックをキャッチできるかどうかはわかりません - ほとんどはブラウザ向けです。多かれ少なかれ機能と使いやすさを備えた他のツールもあります

テスト クライアントから送信された SOAP エンベロープ ボディの外側に、他の要求パラメーターが表示されるはずです。テストクライアントがSOAPメッセージを変更せずにこれを通信できると想像できる唯一の方法です。

名前と値が見つかった場合は、別の名前と値の JSON エンティティとして data: パラメータに追加できます。

于 2013-09-03T16:32:10.137 に答える
0

liorafar: ブラウザがホストしているブラウザから Javascript を実行していると思います。その場合、ブラウザがセキュリティリスクとして特定するすべての実行に対して、クライアントの承認を伴うホストの動作をjavascriptに変更させない限り、それは不可能です。次のことを考慮してください:1)Javascriptは接続構成を制御しません。実行中のホスト(この場合はブラウザ)によって提供される環境のみを使用しますが、サーバー側でも使用できます。2)「わかりました、これを強制しましょう」と言った場合、私の頭に浮かぶ唯一の方法は、ホストまたはクライアントホストのオブジェクトのインスタンスを作成し、強制的に接続を変更することです...そしてその瞬間までにブラウザーはあなたの JavaScript をセキュリティ リスクとして検出します。

この問題を解決するために私がすることは、IT 担当者に依頼して、ブラウザーのプロキシを介した例外規則を使用してブラウザーを構成することです (会社に所属している場合)。

これが何らかの形で役立つことを願っています!!

ガブリエル

于 2013-09-21T21:26:47.773 に答える
0

SOAP リクエストを Fiddler に入れて実行すると、レスポンスが返されます。その応答タイプの場合。応答を取得したら、必要なモードで表示します。

于 2013-10-01T13:54:35.487 に答える