有一个配置的WCF服务:
<services>
<service name="MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint
binding="basicHttpBinding"
contract="IMyService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/MyService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
</behavior>
</serviceBehaviors>
</behaviors>
这个脚本应该叫它:
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
运行脚本时会出现此错误:
客户端:WSDLReader:分析WSDL文件失败HRESULT = 0x8 0004005 - WSDLReader:服务初始化失败HRESULT = 0x80004005 - WSDL服务:服务MyService的端口初始化失败HRESULT = 0x80004005 - WSDLPort:分析端口BasicHttpBinding_IMyService的绑定信息失败HRESULT = 0x80004005 - WSDLPort:端口BasicHttpBinding_IMyService的操作无法初始化HRESULT = 0x8000 4005 - WSDLOperation:操作// def:portType [@ name =“IMyService”] / def:在porttype部分找不到操作[@ name =“MyMethod”] HRESULT = 0x80004005的
出了什么问题?请帮忙。
编辑:
谢谢Cheeso的回答。 MSSOAP的问题似乎是它要求所有xsd模式都包含在生成的WSDL文件中。 WCF默认不这样做。
答案 0 :(得分:15)
不要使用MSSOAP。在过去的3到4年里,我认为现在已经失去了支持。考虑使用XmlHttp,它是MSXML的一部分,并且受支持并继续维护。您必须手动构建SOAP信封。但这种方式更可靠。
示例代码
' 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:'
' <s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> '
' <s:Body> '
' <Register xmlns='urn:Your.Namespace.Here'> '
' <request>hello from a VBScript client.</request> '
' </Register> '
' </s:Body> '
' </s:Envelope>'
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. '
仅供参考:请参阅which-version-of-msxml-should-i-use以了解如何选择MSXML版本。