如何在node.js中使用WCF soap web服务
我使用节点模块wcf.js在网上尝试了很多可用的示例。但是没有得到任何合适的结果。我正在使用下面的url 任何一个能用代码来解释我的人都会很有帮助。我想知道如何访问node.js中的wsdl如何在node.js中使用WCF soap web服务,wcf,node.js,soap,Wcf,Node.js,Soap,我使用节点模块wcf.js在网上尝试了很多可用的示例。但是没有得到任何合适的结果。我正在使用下面的url 任何一个能用代码来解释我的人都会很有帮助。我想知道如何访问node.js中的wsdl 谢谢。您可能需要使用以下选项之一: 还有。我认为另一种选择是: 使用诸如之类的工具记录输入和输出xml消息 用于形成输入xml消息,以将请求发送(POST)到web服务(请注意,标准javascript模板机制,例如or,在这里可以帮助您),最后 使用XML解析器将响应数据反序列化为JavaS
谢谢。您可能需要使用以下选项之一:
还有。我认为另一种选择是:
- 使用诸如之类的工具记录输入和输出xml消息
- 用于形成输入xml消息,以将请求发送(POST)到web服务(请注意,标准javascript模板机制,例如or,在这里可以帮助您),最后
- 使用XML解析器将响应数据反序列化为JavaScript对象
是的,这是一个相当肮脏和低级的方法,但它应该可以毫无问题地工作您没有那么多选择
您可能需要使用以下选项之一:
- 节点soap
- 冲洗
- soapjs
app.get('/getcurr', function(req, res) {
var soap = require('soap');
var args = {FromCurrency: 'USD', ToCurrency: 'INR'};
var url = "http://www.webservicex.net/CurrencyConvertor.asmx?WSDL";
soap.createClient(url, function(err, client) {
client.ConversionRate(args, function(err, result) {
console.log(result);
});
});
});
代码项目有一个类似wcf的api,所以不需要学习新的范例。请看
简而言之,您可以按照以下步骤操作:
var Proxy=require('wcf.js').Proxy;
var BasicHttpBinding=require('wcf.js').BasicHttpBinding;
var binding=新的BasicHttpBinding();
//确保下面创建的代理变量具有实际加载wsdl的工作wsdl链接
var proxy=新代理(绑定)http://YourHost/YourService.svc?wsdl");
/*确保下面的消息看起来像有效的工作SOAP UI请求*/
var message=“”+
"" +
"" +
"" +
“83015348-b9dc-41e5-afe2-85e19d3703f9”+
“IMUT”+
"" +
"" +
"";
/*对于上面创建的消息,请确保它在SOAP UI中正常工作,而不是从SOAP UI复制工作请求*/
/*send的第二个参数是soap操作;您可以在wsdl中找到soap操作*/
代理。发送(消息,“http://YourNamespace/IYourService/YourMethod,功能(响应,ctx){
控制台日志(响应);
/*您的响应是xml格式的,既可以按原样使用,也可以将其解析为JSON等*/
});
在我的例子中,我使用了。默认情况下,forceSoap12Headers
选项设置为false
,这将阻止节点soap
根据soap 1.2生成正确的soap消息。查看更多详细信息:。在我将其设置为true
之后,我能够调用.NET WCF服务。这是一个为我工作的打字脚本代码狙击手
import * as soap from 'soap';
import { IOptions } from 'soap';
// ...
const url = 'https://www.your-domain.com/stock.svc?wsdl';
const opt: IOptions = {
forceSoap12Headers: true,
};
soap.createClient(url, opt, (err, client: soap.Client) => {
if (err) {
throw err;
}
const wsSecurityOptions = {
hasTimeStamp: false,
};
const wsSecurity = new soap.WSSecurity('username', 'password', wsSecurityOptions);
client.setSecurity(wsSecurity);
client.addSoapHeader({ Action: 'http://tempuri.org/API/GetStockDetail' }, undefined, 'wsa', 'http://www.w3.org/2005/08/addressing');
client.addSoapHeader({ To: 'https://www.your-domain.com/stock.svc' }, undefined, 'wsa', 'http://www.w3.org/2005/08/addressing');
const args = {
symbol: 'GOOG',
};
client.GetStockDetail(
args,
(requestErr, result) => {
if (requestErr) {
throw requestErr;
}
console.log(result);
},
);
});
下面是指向节点soap
用法文档的链接:
你可以看看我的代码在这个链接,但它抛出了一些错误。u plz能帮我找出代码中的错误吗?可能重复的代码不适用于https协议:(如何调用https服务?
import * as soap from 'soap';
import { IOptions } from 'soap';
// ...
const url = 'https://www.your-domain.com/stock.svc?wsdl';
const opt: IOptions = {
forceSoap12Headers: true,
};
soap.createClient(url, opt, (err, client: soap.Client) => {
if (err) {
throw err;
}
const wsSecurityOptions = {
hasTimeStamp: false,
};
const wsSecurity = new soap.WSSecurity('username', 'password', wsSecurityOptions);
client.setSecurity(wsSecurity);
client.addSoapHeader({ Action: 'http://tempuri.org/API/GetStockDetail' }, undefined, 'wsa', 'http://www.w3.org/2005/08/addressing');
client.addSoapHeader({ To: 'https://www.your-domain.com/stock.svc' }, undefined, 'wsa', 'http://www.w3.org/2005/08/addressing');
const args = {
symbol: 'GOOG',
};
client.GetStockDetail(
args,
(requestErr, result) => {
if (requestErr) {
throw requestErr;
}
console.log(result);
},
);
});