我想从node.js
向WCF soap web服务发送职位我正在使用soap node.js插件并调用这样的远程方法:
var localisationMessage = {
BlackboxNumber: adc,
Heading: heading,
Kilomettrage: kilomettrage,
Latitude: latitude,
Longitude: longitude,
PositionDate: '2014-01-28T10:28:09.859225+01:00', //date.toISOString(),
Satelite: satelite,
Speed: speed,
}
var args = {
mess: localisationMessage
}
console.dir(args);
self.soap_client.SendLocalisation(args, function(err, result) {
...
}
使用tcpdump,这是发送给服务的内容:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://tempuri.org/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract">
<soap:Header></soap:Header>
<soap:Body>
<tns:SendLocalisation xmlns:tns="http://tempuri.org/" xmlns="http://tempuri.org/">
<tns:mess>
<tns:BlackboxNumber>521020</tns:BlackboxNumber>
<tns:Heading>0</tns:Heading>
<tns:Kilomettrage>0</tns:Kilomettrage>
<tns:Latitude>50.82401</tns:Latitude>
<tns:Longitude>4.30416</tns:Longitude>
<tns:PositionDate>2014-01-28T10:28:09.859225+01:00</tns:PositionDate>
<tns:Satelite>7</tns:Satelite>
<tns:Speed>0</tns:Speed>
</tns:mess>
</tns:SendLocalisation>
</soap:Body>
</soap:Envelope>
使用上面的代码,我收到一个错误的答案 我应该发送的是这个(使用C#的tcpdump跟踪):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body><SendLocalisation xmlns="http://tempuri.org/">
<mess xmlns:a="http://my_webservice_namespace" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:BlackboxNumber>358696048896800</a:BlackboxNumber>
<a:Heading>0</a:Heading>
<a:Kilomettrage>0</a:Kilomettrage>
<a:Latitude>50</a:Latitude>
<a:Longitude>3</a:Longitude>
<a:PositionDate>2014-01-28T10:28:09.859224+01:00</a:PositionDate>
<a:Satelite>7</a:Satelite>
<a:Speed>0</a:Speed>
</mess>
</SendLocalisation>
</s:Body>
</s:Envelope>
正如您所看到的,主要区别在于soap调用的所有参数都在命名空间a中,当我使用node.js中的服务时,该命名空间未定义
如何在node.js上的soap方法调用期间定义此命名空间?
答案 0 :(得分:-2)
我找到了一种让它工作的方法,即将所有数据作为字符串发送并自己编写xml。
如果您有更好的解决方案,请发送另一个答案。
var args = '<tns:SendLocalisation>' +
'<tns:mess xmlns:a="http://my_webservice_namespace" ' +
'xmlns:i="http://www.w3.org/2001/XMLSchema-instance">' +
'<a:BlackboxNumber>' + adc + '</a:BlackboxNumber>' +
'<a:Heading>' + heading + '</a:Heading>' +
'<a:Kilomettrage>' + kilomettrage + '</a:Kilomettrage>' +
'<a:Latitude>' + latitude + '</a:Latitude>' +
'<a:Longitude>' + longitude + '</a:Longitude>' +
'<a:PositionDate>' + date.toISOString() + '</a:PositionDate>' +
'<a:Satelite>' + satelite + '</a:Satelite>' +
'<a:Speed>' + speed + '</a:Speed>' +
'</tns:mess>' +
'</tns:SendLocalisation>';
self.soap_client.SendLocalisation(args, function(err, result) {
...
}