【发布时间】:2016-06-06 00:15:30
【问题描述】:
我有一个可以使用 Microsoft 的 WCFTestClient.exe 调用的 Web 服务。但是,当我尝试在 Excel 2013 中创建宏来调用 Web 服务时,它不起作用。
它不会出错,但它实际上也不会在 Web 服务器上运行方法 (RunScript)。
这是我的代码:
Private Sub web()
Dim sURL As String
Dim sEnv As String
Dim objHTTP As Object
Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
sURL = "http://testserver:9001/TestService"
On Error GoTo ErrorLabel
sEnv = sEnv & "<s:Envelope xmlns:a=""http://www.w3.org/2005/08/addressing"" xmlns:s=""http://www.w3.org/2003/05/soap-envelope"" > "
sEnv = sEnv & " <s:Header>"
sEnv = sEnv & " <a:Action s:mustUnderstand=""1"">http://tempuri.org/TestService/RunScript</a:Action>"
sEnv = sEnv & " <a:MessageID>urn:uuid:9405af92-1f5b-4ead-87</a:MessageID> <a:ReplyTo>"
sEnv = sEnv & " <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>"
sEnv = sEnv & " </a:ReplyTo>"
sEnv = sEnv & " </s:Header>"
sEnv = sEnv & " <s:Body>"
sEnv = sEnv & " <RunScript xmlns=""http://tempuri.org/""/> "
sEnv = sEnv & " </s:Body>"
sEnv = sEnv & "</s:Envelope>"
With objHTTP
.Open "GET", sURL, False
.setRequestHeader "Content-Type", "text/xml"
.send sEnv
End With
Set objHTTP = Nothing
ExitLabel:
'Clean-up code, if any, goes here
Exit Sub
ErrorLabel:
'Error-handling code goes here
Resume ExitLabel
End Sub
我知道 web 服务有效,因为我创建了其他成功使用 web 服务的客户端。我对这个 Excel 2013 宏做错了什么?
**EDIT -- 上面使用的是wsHTTPBinding,我把它改成使用basicHTTPBinding:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/TestService/RunScript</Action>
</s:Header>
<s:Body>
<RunScript xmlns="http://tempuri.org/" />
</s:Body>
</s:Envelope>
我在提琴手中运行它,但最终得到 504 - 网关超时。运行 WCFClient 并添加服务以及编写一个小型控制台应用程序来使用它(通过添加 Web 引用)。
我使用的肥皂 xml 与 WCFClient 工具中的完全相同。
提前致谢!
【问题讨论】:
-
.Open "GET", sURL, False?确定您的服务需要带有GET请求的请求正文吗?也许.Open "POST", sURL, False? -
如果我尝试 POST,我会收到“400”错误。
标签: excel vba web-services