gpt4 book ai didi

javascript - 如何使用与 WCF 测试客户端使用相同的 SOAP 在 javascript AJAX 中使用一个代理

转载 作者:行者123 更新时间:2023-12-03 03:26:17 25 4
gpt4 key购买 nike

我有 WCF Web 服务和 javascript 客户端,它使用 SOAP 1.2 通过 AJAX 连接到该服务。我想要做的是传递一些参数来告诉 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 测试客户端的流量,看看它是否向您可以添加的调用添加任何参数AJAX 调用中的请求 header 。

Fiddler 可能会完成这项工作,尽管我不确定它是否会捕获所有 http 流量 - 大多数情况下它是针对浏览器的。还有其他工具具有或多或少的功能和易用性,例如 wire sharkether 等。

我猜想您应该能够看到从测试客户端传输的 SOAP 信封正文之外还有一些其他请求参数。这是我想象的测试客户端能够在不修改 SOAP 消息的情况下进行通信的唯一方法。

如果您可以找到名称和值,则可以将其作为另一个名称-值 JSON 实体添加到 data: 参数中。

关于javascript - 如何使用与 WCF 测试客户端使用相同的 SOAP 在 javascript AJAX 中使用一个代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13628365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com