gpt4 book ai didi

node.js - 如何在 node.js 中使用 wcf?

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:26 25 4
gpt4 key购买 nike

我想在 node.js 中使用 wcf。我试过了:

soap.createClient(url, function (err, client) {
如果(错误){
控制台日志(错误);
返回假;
}
client.myFunc(args, function(err1, result) {
如果(结果。成功)
返回真;
});
});

但是在createClient(错误 block )中发生了错误。它说: Unexpected root element of WSDL or include 。然后我通过 wcf.js 尝试:

var BasicHttpBinding = require('wcf.js').BasicHttpBinding
, Proxy = require('wcf.js').Proxy
, binding = new BasicHttpBinding()
, proxy = new Proxy(binding, " http://localhost/myService.svc");
var message = '<Envelope xmlns=' +
'"http://schemas.xmlsoap.org/soap/envelope/">' +
'<Header />' +
'<Body>' +
'<myFunc xmlns="http://localhost/myService.svc/">' +
'<value>'+ args +'</value>' +
'</AddNewUser>' +
'</Body>' +
'</Envelope>';
proxy.send(message, "http://localhost/myService.svc", function (result, ctx){
if(result.success)
return true;
});

但是我的程序没有调用发送函数。最后,我尝试将 WCF 配置为 WSDL 发布,如下所示:WCF cannot configure WSDL publishing

但是没有成功!我该如何解决我的问题?

最佳答案

我遇到了这个问题,在我的例子中,这是因为响应是压缩的。 npm 包 soap 确实指定了 'Accept-Encoding': 'none' 但 SOAP 服务器(由我公司开发)表现不佳并发回 gzipped 主体。 soap 包不处理这个问题。

我正在考虑的一种替代方法是在 createClientoptions 参数中传递我自己的 httpclient 并将其解压缩。在 GitHub 上的 node-soap 代码测试中有一个使用自定义 httpclient 的示例:https://github.com/vpulim/node-soap/blob/master/test/client-customHttp-test.js .

我还没有想出如何解压缩响应,但一旦我想出答案,我会更新这个答案。

更新

对于 gzipped 响应,它更简单。您可以将任何您想要的选项传递给 createClient options 对象的 wsdl_options 属性中的 Node request 调用。这包括 gzip: true,这将使 request 为您处理 gzip 压缩请求。例如

soap.createClient('http://someservice.com/?wsdl', 
{ wsdl_options: { gzip: true } },
function (err, client) {});

然后在进行 SOAP 方法调用时,在回调之后将 gzip 参数添加到选项参数,例如

client.someSoapCall({arg1:"12345"},
function (err, result) {},
{ gzip: true });

我通过深入研究 Node soap 代码弄清楚了这一点。文档没有明确提及这些事情。

关于node.js - 如何在 node.js 中使用 wcf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30139878/

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