Llamando al servicio WCF por VBScript

Hay un servicio WCF con configuración:

                 

Se supone que este script lo llama:

 Option Explicit Dim soapClient Dim serviceUri Dim serviceName Dim portName Dim result serviceUri = "http://localhost:8001/MyService" serviceName = "MyService" portName = "BasicHttpBinding_IMyService" Set soapClient = CreateObject("MSSOAP.soapClient") soapClient.ClientProperty("ServerHTTPRequest") = True soapClient.mssoapinit serviceUri & "?WSDL", serviceName, portName 

Al ejecutar el script aparece este error:

Cliente: WSDLReader: Análisis del archivo WSDL fallido HRESULT = 0x8 0004005 – WSDLReader: Inicialización del servicio fallido HRESULT = 0x80004005 – Servicio WSDL: Inicialización del puerto para el servicio MyService failed HRESULT = 0x80004005 – WSDLPort: Análisis de la información de enlace para el puerto BasicHttpBinding_IMyService failed HRESULT = 0x80004005 – WSDLPort: no se pudo inicializar una operación para el puerto BasicHttpBinding_IMyService HRESULT = 0x8000 4005 – WSDLOperation: La operación // def: portType [@ name = “IMyService”] / def: operation [@ name = “MyMethod”] no se pudo inicializar encontrado en la sección de porte HRESULT = 0x80004005

¿Qué está pasando mal? Por favor ayuda.

Editar:

Gracias, Cheeso, por la respuesta. El problema con MSSOAP parece ser que requiere que todos los esquemas xsd se incluyan en línea en el archivo WSDL generado. WCF no lo hace de manera predeterminada.

No use MSSOAP. Creo que ahora está fuera de soporte, durante los últimos 3 o 4 años. Considere usar XmlHttp, que es parte de MSXML, y es compatible y se mantiene. Deberá construir un sobre SOAP manualmente. Pero es más confiable de esta manera.

código de ejemplo

 ' URL to the WCF service' url= "http://server:port/Wcf.Service.Address" Dim requestDoc Set requestDoc = WScript.CreateObject("MSXML2.DOMDocument.6.0") Dim root Set root = requestDoc.createNode(1, "Envelope", "http://schemas.xmlsoap.org/soap/envelope/") requestDoc.appendChild root Dim nodeBody Set nodeBody = requestDoc.createNode(1, "Body", "http://schemas.xmlsoap.org/soap/envelope/") root.appendChild nodeBody Dim nodeOp Set nodeOp = requestDoc.createNode(1, "Register", "urn:Your.Namespace.Here") nodeBody.appendChild nodeOp Dim nodeRequest Set nodeRequest = requestDoc.createNode(1, "request", "urn:Your.Namespace.Here") 'content of the request will vary depending on the WCF Service.' ' This one takes just a plain string. ' nodeRequest.text = "Hello from a VBScript client." nodeOp.appendChild nodeRequest Set nodeRequest = Nothing Set nodeOp = Nothing Set nodeBody = Nothing Set root = Nothing 'the request will look like this:' '  ' '  ' '  ' ' hello from a VBScript client. ' '  ' '  ' ' ' WSCript.Echo "sending request " & vbcrlf & requestDoc.xml dim xmlhttp set xmlhttp = WScript.CreateObject("MSXML2.ServerXMLHTTP.6.0") ' set the proxy as necessary and desired ' xmlhttp.setProxy 2, "http://localhost:8888" xmlhttp.Open "POST", url, False xmlhttp.setRequestHeader "Content-Type", "text/xml" ' set SOAPAction as appropriate for the operation ' xmlhttp.setRequestHeader "SOAPAction", "urn:Set.As.Appropriate" xmlhttp.send requestDoc.xml WScript.Echo vbcrlf & "Raw XML response:" & vbcrlf WSCript.Echo xmlhttp.responseXML.xml dim response set response= xmlhttp.responseXML 'the response is an MSXML2.DOMDocument.6.0' 'party on the response here - XPath, walk the DOM, etc. ' 

FYI: consulte which-version-of-msxml-should-i-use para aprender a seleccionar una versión de MSXML.

    Intereting Posts