Подтвердить что ты не робот

Как использовать один прокси-сервер в javascript AJAX с использованием SOAP так же, как использование клиента WCF Test

У меня есть веб-служба WCF и javascript-клиент, который подключается к этой службе через AJAX, используя SOAP 1.2. Что я хочу сделать, так это передать некоторый параметр, чтобы сообщить SOA-вызову AJAX использовать только один прокси так же, как я это делаю в тестовом клиенте 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/info/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);
        }
    }  
4b9b3361

Ответ 1

Я начну, сказав, что не знаю конкретного ответа на этот вопрос, но мой подход состоял бы в том, чтобы обнюхать трафик с вашего тестового клиента WFC, чтобы узнать, добавляет ли он какие-либо параметры к вызову, который вы могли бы добавить в ваш заголовок запроса на ваш вызов AJAX.

Fiddler может выполнить эту работу, хотя я не уверен, что он поймает весь трафик http - в основном он ориентирован на браузеры. Существуют и другие инструменты с большей или меньшей способностью и простотой использования, например проводная акула, эфир и т.д.

Я бы предположил, что есть другой параметр запроса вне тела оболочки SOAP, передаваемый от тестового клиента, который вы должны видеть. Это единственный способ, которым я могу представить, что тестовый клиент сможет обмениваться данными без изменения вашего сообщения SOAP.

Если вы можете найти имя и значение, вы можете добавить его в свои данные: параметр как другой объект JSON с именем-значением.

Ответ 2

liorafar:        Я предполагаю, что вы используете Javascript из браузера в качестве хоста. Если это невозможно, если вы не разрешаете изменению javascript какое-либо поведение вашего хоста, которое с клиентом aproval для каждого исключения, которое браузер определяет как угрозу безопасности. Считают, что:  1) Javascript не контролирует конфигурацию соединения, он использует только окружение, предоставляемое хостом, где он запущен, в этом случае браузер, но также может быть на стороне сервера.  2) В случае, если вы произнесете "ok, давайте принудительно это", единственный способ, который приходит мне на ум, - сделать экземпляр вашего хоста или любого объекта клиентского хоста и заставить изменить соединение... и к этому моменту браузер обнаружит ваш javascript как риск для безопасности, и вы должны создать script для каждого браузера на рынке, потому что у каждого есть способ справиться с этим... единственная хорошая новость в том, что с IE вы можете измените конфигурацию для Chrome тоже!

Что я буду делать для решения этой проблемы, так это попросить ИТ-специалистов настроить браузеры с помощью некоторого правила исключения из прокси-сервера в браузерах (если вы попали в компанию).

Я надеюсь, что это может помочь так или иначе!!

Габриэль

Ответ 3

Вы можете поместить свой запрос на мыло в Fiddler, а затем выполнить, вы получите ответ. Для этого типа ответа. Когда вы получите ответ на просмотр в нужном вам режиме.