Как использовать один прокси-сервер в 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);
}
}
Ответы
Ответ 1
Я начну, сказав, что не знаю конкретного ответа на этот вопрос, но мой подход состоял бы в том, чтобы обнюхать трафик с вашего тестового клиента WFC, чтобы узнать, добавляет ли он какие-либо параметры к вызову, который вы могли бы добавить в ваш заголовок запроса на ваш вызов AJAX.
Fiddler может выполнить эту работу, хотя я не уверен, что он поймает весь трафик http - в основном он ориентирован на браузеры. Существуют и другие инструменты с большей или меньшей способностью и простотой использования, например проводная акула, эфир и т.д.
Я бы предположил, что есть другой параметр запроса вне тела оболочки SOAP, передаваемый от тестового клиента, который вы должны видеть. Это единственный способ, которым я могу представить, что тестовый клиент сможет обмениваться данными без изменения вашего сообщения SOAP.
Если вы можете найти имя и значение, вы можете добавить его в свои данные: параметр как другой объект JSON с именем-значением.
Ответ 2
liorafar: Я предполагаю, что вы используете Javascript из браузера в качестве хоста. Если это невозможно, если вы не разрешаете изменению javascript какое-либо поведение вашего хоста, которое с клиентом aproval для каждого исключения, которое браузер определяет как угрозу безопасности.
Считают, что: 1) Javascript не контролирует конфигурацию соединения, он использует только окружение, предоставляемое хостом, где он запущен, в этом случае браузер, но также может быть на стороне сервера. 2) В случае, если вы произнесете "ok, давайте принудительно это", единственный способ, который приходит мне на ум, - сделать экземпляр вашего хоста или любого объекта клиентского хоста и заставить изменить соединение... и к этому моменту браузер обнаружит ваш javascript как риск для безопасности, и вы должны создать script для каждого браузера на рынке, потому что у каждого есть способ справиться с этим... единственная хорошая новость в том, что с IE вы можете измените конфигурацию для Chrome тоже!
Что я буду делать для решения этой проблемы, так это попросить ИТ-специалистов настроить браузеры с помощью некоторого правила исключения из прокси-сервера в браузерах (если вы попали в компанию).
Я надеюсь, что это может помочь так или иначе!!
Габриэль
Ответ 3
Вы можете поместить свой запрос на мыло в Fiddler, а затем выполнить, вы получите ответ. Для этого типа ответа. Когда вы получите ответ на просмотр в нужном вам режиме.