Excel Vba 調用WebService的兩種方式,解決MSSOAP30 64位不兼容問題


雖然是很老的技術了,但是碰到了,還是講講.....

Office Excel 采用Vba的方式調用WebService主要有兩種方式:

1.n年前,微軟提供MSSOAP30組件,為VC++編寫的,這種方式和.Net調用WebService方式很類似,都是添加引用;但是致命的缺陷是不支持64位的Office程序(支持64位機器中運行32位的Office);而且微軟已經明確提醒開發者,已經放棄了MSSOAP30,替代為Framework的office開發。

此路不通....

2.采用基本的HTTP方式調用,這個方式非常好,理論上可以調用任何url,接受responseBody,完美支持WSDL、Restful的webservice,需要注意的是.Net開發的WSDL WebService需要開啟Ajax調用方式

Function GetWsrrRlt(XmlStr As String) As String
Dim objHTTP, xmlDOC

'調用webservice方法
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Set xmlDOC = CreateObject("MSXML.DOMDocument")
strWebserviceURL = "http://192.168.0.114/wsrr.asmx/CallByXML"
objHTTP.Open "POST", strWebserviceURL, False'默認是POST方式
objHTTP.setRequestHeader "Content-Type", "application/json"
objHTTP.send ("{XmlInput:'" & XmlStr & "'}")'XmlInput是Ws的參數
GetWsrrRlt = CStr(BytesToBstr((objHTTP.responseBody), "utf-8"))
GetWsrrRlt = GetStringByJson(GetWsrrRlt)'.net3.5,.net4.0和以后的ws,默認返回的json字符格式為{"d":"這里是你期望的json,例如{"result":"1"}"} '解析JSON格式
'Dim objSC, strJSON, objJS
'strJOSN = "{ ""myname"":""liucqa"",""myid"":""007"" }"
'Set objSC = CreateObject("MSScriptControl.ScriptControl")    '調用ScriptControl對象
'strJSON = "var o=" & strJOSN & ";"
'objSC.Language = "javascript"
'objSC.AddCode (strJSON)
'Set objJS = objSC.CodeObject.o
'MsgBox CallByName(objJS, "myname", VbGet) & "=" & CallByName(objJS, "myid", VbGet)


'Dim soapClient As SoapClient30
'Set soapClient = CreateObject("MSSOAP.SOAPCLIENT30")
'soapClient.MSSoapInit "http://192.168.0.114/wsrr.asmx?wsdl", "WSRR", "WSRRSoap", ""
'soapClient.ClientProperty("ServerHTTPRequest") = True
'GetWsrrRlt = CStr(soapClient.callbyxml(XmlStr))
End Function

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM