2016-03-29 4 views
0

ich das Knoten-Seife Paket bin mit dem folgenden SOAP-Dienst zu konsumieren: https://paymentsuat.mppglobal.com/interface/mpp/ipaypaymentpages/ipaypaymentpages.asmx?wsdlWie ein Wsdl Betrieb in node-Seife wählen

Für die iPayPaymentPagesSoap Port gibt es zwei Operationen mit dem gleichen Namen, aber anders Parameter.

Mit der Funktion describe zeigt node-soap nur die letzte Operation für jeden Porttyp an. Gibt es eine Möglichkeit auszuwählen, welche Operation aufgerufen wird?

<wsdl:portType name="iPayPaymentPagesSoap"> 
    <wsdl:operation name="CreateSession"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
     Retrieves a Guid from the system populated with details. Used in conjunction with ipayment pages. 
     </wsdl:documentation> 
     <wsdl:input name="CreateSessionBySOAP" message="tns:CreateSessionBySOAPSoapIn"/> 
     <wsdl:output name="CreateSessionBySOAP" message="tns:CreateSessionBySOAPSoapOut"/> 
    </wsdl:operation> 
    <wsdl:operation name="CreateSession"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
     Retrieves a Guid from the system populated with user details. Used in conjunction with ipayment pages. 
     </wsdl:documentation> 
     <wsdl:input name="CreateSessionByGET" message="tns:CreateSessionByGETSoapIn"/> 
     <wsdl:output name="CreateSessionByGET" message="tns:CreateSessionByGETSoapOut"/> 
    </wsdl:operation> 
</wsdl:portType> 

Renders zu:

{ 
    iPayPaymentPages: { 
     iPayPaymentPagesSoap: { 
      CreateSession: { 
       input: { 
        affiliateId: "s:int", 
        password: "s:string" 
       }, 
       output: { 
        CreateSessionByGETResult: { 
         Guid: "s:string", 
         ErrorNumber: "s:int", 
         ErrorMessage: "s:string", 
         targetNSAlias: "tns", 
         targetNamespace: "https://secure1.mppglobal.com/interface/ipaypaymentpages/ipaypaymentpages.asmx" 
        } 
       } 
      } 
     } 
    } 
} 

aber ich bin mit dem Ziel Create mit den CreateSessionBySOAP Parameter zu verwenden, aber Knoten-Seife standardmäßig CreateSessionByGET.

* Ich habe keine Kontrolle über die WSDL und würde lieber nicht SOAP mit Node.js verwenden, aber ich bin in diesem Fall fest damit!

Antwort

0

ich bleibe im selben Verhalten stecken, scheint, dass in Node-soap/lib/client.js die WSDL als Objekt oder dom-Objekt verwendet, aber bei wsdl: portTypes stellt es nur das letzte Operation-Element. In meinem Fall habe ich 4 Operationen mit dem gleichen Namen, also hier ist, wie ich es löse.

 soap.createClient(url, options, function(err, client) { 

     var method = client.wsdl.definitions.services.[Service].ports.[Port].binding.methods['CreateSession']; 
     var location = client.wsdl.definitions.services.[Service].ports.[Port].location; 

     //change method $name, method input $name 
     method.$name = 'CreateSessionBySOAP'; 
     method.input.$name = 'CreateSessionBySOAP'; 

     var def= client._defineMethod(method, location); 
     //invoke the method 
     def(args, options, function(err, result) { 
      console.log(JSON.stringify(result)); 
     }); 
     console.log(client.lastMessage); 
     console.log(client.lastResponse); 
});