- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在 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 包不处理这个问题。
我正在考虑的一种替代方法是在 createClient
的 options
参数中传递我自己的 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/
我是一名优秀的程序员,十分优秀!