gpt4 book ai didi

wcf - 通过 VBScript 调用 WCF 服务

转载 作者:行者123 更新时间:2023-12-04 03:24:55 26 4
gpt4 key购买 nike

有一个带有配置的 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 的绑定(bind)信息失败 HRESULT=0x80004005 - WSDLPort:无法初始化端口 BasicHttpBinding_IMyService 的操作 HRESULT=0x8000
4005 - WSDLOperation:操作//def:portType[@name="IMyService"]/
def:operation[@name="MyMethod"] 在 porttype 部分中找不到
HRESULT=0x80004005

出了什么问题?请帮忙。

编辑:

谢谢你,芝士,你的回答。
MSSOAP 的问题似乎在于它要求所有 xsd 模式都内嵌在生成的 WSDL 文件中。 WCF 默认情况下不这样做。

最佳答案

不要使用 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 版本。

关于wcf - 通过 VBScript 调用 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com