source

WCF Test Client 사용과 동일하게 SOAP를 사용하여 javascript AJAX에서 하나의 프록시를 사용하는 방법

manysource 2023. 10. 27. 21:59

WCF Test Client 사용과 동일하게 SOAP를 사용하여 javascript AJAX에서 하나의 프록시를 사용하는 방법

저는 SOAP 1.2를 사용하여 AJAX를 통해 이 서비스에 연결되는 WCF 웹 서비스와 자바스크립트 클라이언트가 있습니다. 제가 원하는 것은 "새로운 프록시 시작"을 선택 취소하여 AJAX SOAP 호출에 WCF 테스트 클라이언트에서 하는 것과 동일한 하나의 프록시만 사용하도록 지시하는 파라미터를 전달하는 것입니다.image

그리고 이건 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);
        }
    }  

우선 이에 대한 구체적인 답변은 모르지만, 제 접근 방식은 WFC Test Client에서 트래픽을 스니핑하여 AJAX 호출 시 요청 헤더에 추가할 수 있는 매개 변수를 호출에 추가하는지 확인하는 것입니다.

대부분 브라우저에 맞추어져 있는 http 트래픽을 모두 잡을 수 있을지는 모르겠지만 fiddler가 그 일을 할 수도 있습니다.와이어샤크, 에테르 등과 같이 기능과 사용 편의성이 다소 떨어지는 다른 도구들이 있습니다.

SOAP 봉투 본체 외부에 테스트 클라이언트에서 전송되는 다른 요청 파라미터가 있을 것으로 예상됩니다.이것이 제가 상상할 수 있는 유일한 방법입니다. SOAP 메시지를 수정하지 않고도 테스트 클라이언트가 이것을 전달할 수 있을 것입니다.

이름과 값을 찾을 수 있으면 다른 이름-값 JSON 개체로 데이터: 매개 변수에 추가할 수 있습니다.

리오라파:당신은 브라우저에서 자바스크립트를 호스트로 실행하고 있다고 생각합니다.그렇다면 브라우저가 보안 위험으로 식별하는 모든 실행에 대해 클라이언트와 함께 있는 호스트의 일부 동작을 변경하도록 javascript를 허용하지 않는 한 불가능합니다.다음 사항을 고려하십시오. 1) 자바스크립트는 연결 구성을 제어하지 않으며, 실행 중인 호스트가 제공하는 환경만 사용하며, 이 경우 브라우저가 서버 측에 있을 수 있습니다.2) 만약 당신이 "좋아, 강제로 이것을 하자"라고 말하는 경우, 내 머릿속에 떠오르는 유일한 방법은 당신의 호스트나 클라이언트 호스트의 어떤 개체의 인스턴스를 만들어서 강제로 연결을 변경하는 것입니다.그리고 그 순간 브라우저는 당신의 자바스크립트를 보안 위험으로 감지할 것이고 당신은 시장의 모든 브라우저에 대해 스크립트를 만들어야 할 것입니다. 왜냐하면 모든 사람들은 이것을 처리할 수 있는 방법을 가지고 있기 때문입니다.이에 대한 유일한 좋은 소식은 IE를 사용하면 Chrome의 구성도 변경할 수 있다는 것입니다!!

이 문제를 해결하기 위해 IT 담당자에게 브라우저의 프록시에 대한 몇 가지 예외 규칙을 적용하여 브라우저를 구성하도록 요청하는 것입니다(회사에 가입한 경우).

어떻게든 도움이 되었으면 좋겠습니다!!

가브리엘

비누 요청을 Fiddler에 입력하면 응답을 받을 수 있습니다.해당 응답 유형.응답을 받으면 원하는 모드로 확인합니다.

언급URL : https://stackoverflow.com/questions/13628365/how-to-use-one-proxy-in-javascript-ajax-using-soap-the-same-as-wcf-test-client-u