Node-SOAP不支持对参数进行编码

我有一个用专有语言编写的SOAP Web服务。 WSDL如下所示:

<?xml version='1.0' encoding='UTF-8'?> <definitions name='UKBacklineService' targetNamespace='urn:CompanyName:SOAP/UKBackline' xmlns:wsdlns='urn:CompanyName:SOAP/UKBackline' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsdk='urn:CompanyName:SOAP/UKBackline/Schema' xmlns:kcml='http://www.kcml.com' xmlns='http://schemas.xmlsoap.org/wsdl/'> <message name='SOAP_UpdatePriorityCasesIn'> <part name='sJsonData' type='xsd:string' /> </message> <message name='SOAP_UpdatePriorityCasesOut'> <part name='return' type='xsd:string' /> </message> <portType name='UKBacklineIFInterface'> <operation name='SOAP_UpdatePriorityCases'> <documentation>Returns solution information in JSON format</documentation> <input message='wsdlns:SOAP_UpdatePriorityCasesIn'/> <output message='wsdlns:SOAP_UpdatePriorityCasesOut'/> </operation> </portType> <binding name='UKBacklineIFBinding' type='wsdlns:UKBacklineIFInterface'> <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='SOAP_UpdatePriorityCases'> <soap:operation style='rpc' soapAction='urn:CompanyName:SOAP/UKBackline/UKBacklineIF#SOAP_UpdatePriorityCases'/> <input> <soap:body use='encoded' namespace='urn:CompanyName:SOAP/UKBackline/UKBacklineIF' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </input> <output> <soap:body use='encoded' namespace='urn:CompanyName:SOAP/UKBackline/UKBacklineIF' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </output> </operation> </binding> <service name='UKBacklineService'> <port name='UKBacklineIFPort' binding='wsdlns:UKBacklineIFBinding'> <soap:address location='http://internal.domain/UKBackline/UKBacklineIF'/> </port> </service> </definitions> 

我们有一个C#程序,它使用这个Web服务 – 成功 – 它发送的XML是:

 <?xml version="1.0" encoding="utf-8" ?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:CompanyName:SOAP/UKBackline" xmlns:types="urn:CompanyName:SOAP/UKBackline/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <q1:SOAP_UpdatePriorityCases xmlns:q1="urn:CompanyName:SOAP/UKBackline/UKBacklineIF"> <sJsonData xsi:type="xsd:string">test data</sJsonData> </q1:SOAP_UpdatePriorityCases> </soap:Body> </soap:Envelope> 

节点 – 肥皂版本发送以下XML:

 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdlns="urn:CompanyName:SOAP/UKBackline" xmlns:xsdk="urn:CompanyName:SOAP/UKBackline/Schema" xmlns:kcml="http://www.kcml.com"> <soap:Body> <wsdlns:SOAP_UpdatePriorityCases> <sJsonData>here is the value</sJsonData> </wsdlns:SOAP_UpdatePriorityCases> </soap:Body> </soap:Envelope> 

不幸的是节点版本因错误而失败

 <faultstring>Argument string is badly encoded, Unsupported encoding for sJsonData.</faultstring> 

我不确定如何解决这个问题…我使用下面的代码:

 var url = 'path to wsdl'; var args = { sJsonData: { attributes: { 'xsi:type': 'xsd:string' }, $value: 'here is the value' } }; soap.createClient(url, function(err, client) { client.SOAP_UpdatePriorityCases(args, function(err, result) { console.log(err); console.log(result); }); }); 

任何帮助感激!