我想在node.js中使用wcf。我试过了:
soap.createClient(url, function (err, client) {
if (err) {
console.log(err);
return false;
}
client.myFunc(args, function(err1, result) {
if(result.success)
return true;
});
});
但是createClient(错误块)发生错误。它说:WSDL或包含的意外的根元素。 然后我尝试了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
但它没有用到!我怎样才能解决我的问题?
答案 0 :(得分:1)
我遇到了这个,在我的情况下,因为响应是gzip压缩的。 npm包肥皂确实指定了'Accept-Encoding': 'none'
,但是SOAP服务器(由我的公司开发)表现不佳,并发回一个gzipped主体。肥皂包不能解决这个问题。
我要看的另一个选择是在httpclient
options
createClient
参数中传递我自己的request
并将其解压缩。在GitHub上的node-soap代码的测试中有一个使用自定义httpclient的示例:https://github.com/vpulim/node-soap/blob/master/test/client-customHttp-test.js。
我还没有弄清楚如何解压缩响应,但是一旦我解决了这个问题,我就会更新这个答案。
<强>更新强>
对于gzipped响应,它更简单。您可以在createClient
options
对象的wsdl_options属性中将所需的任何选项传递给节点gzip: true
。这包括request
,这将使soap.createClient('http://someservice.com/?wsdl',
{ wsdl_options: { gzip: true } },
function (err, client) {});
处理gzip压缩请求。 e.g。
client.someSoapCall({arg1:"12345"},
function (err, result) {},
{ gzip: true });
然后在进行SOAP方法调用时,在回调后将gzip参数添加到options参数中,例如
using (StreamWriter outfile = new StreamWriter("C:\\Output\\Final\\BigInteger.txt"))
{
foreach var part in numberParts
{
outfile.Write(part);
}
}
我通过挖掘节点soap代码来解决这个问题。文档没有明确提到这些事情。