2017-06-06 137 views
0

我想在XML從VBA在Excel 2010中調用WCF服務2010

調用一個ASP.Net WCF服務我讀了這個問題: calling web service using VBA code in excel 2010 ,但我不能使用第三方庫,XML或JSON。

有沒有辦法做到這一點本地與VBA與網絡服務工作?

編輯 我已經安裝了SOAP工具包3.0SOAP工具包3.0軟件更新

我已經添加了這些庫我的工作簿:

  • 微軟XML,3.0
  • Microsoft SOAP類型庫3.0
  • WINHTTP SOAP連接器類型庫
  • WinInet的SOAP連接器類型庫
  • Microsoft Soap WSDL文件生成器v3.0

我想我必須通過「工具 - >添加Web引用」菜單將我的服務的Web引用添加到我的工作簿中,但未顯示此選項。我該怎麼做才能看到它?

回答

1

這是一個示例程序,從使用Microsoft XML 3.0庫中的Web服務獲取數據:

Sub DoIt() 
    Dim sURL As String 
    Dim sEnv As String 
    Dim xmlHtp As New MSXML2.XMLHTTP 
    Dim xmlDoc As New DOMDocument 
    Dim oValueNodes As MSXML2.IXMLDOMNodeList 
    sURL = "http://webservices.gama-system.com/exchangerates.asmx?op=CurrentConvertToEUR" 

    sEnv = "<?xml version=""1.0"" encoding=""utf-8""?>" 
    sEnv = sEnv & "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" 
    sEnv = sEnv & " <soap:Body>" 
    sEnv = sEnv & " <CurrentConvertToEUR xmlns=""http://www.gama-system.com/webservices"">" 
    sEnv = sEnv & "  <dcmValue>100</dcmValue>" 
    sEnv = sEnv & "  <strBank>BS</strBank>" 
    sEnv = sEnv & "  <strCurrency>USD</strCurrency>" 
    sEnv = sEnv & "  <intRank>1</intRank>" 
    sEnv = sEnv & " </CurrentConvertToEUR>" 
    sEnv = sEnv & " </soap:Body>" 
    sEnv = sEnv & "</soap:Envelope>" 

    With xmlHtp 
     .Open "post", sURL, False 
     .setRequestHeader "Host", "webservices.gama-system.com" 
     .setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
     .setRequestHeader "soapAction", "http://www.gama-system.com/webservices/CurrentConvertToEUR" 
     .send sEnv 
     xmlDoc.loadXML .responseText 
     Set oValueNodes = xmlDoc.getElementsByTagName("CurrentConvertToEURResponse") 
     MsgBox oValueNodes.Item(0).nodeTypedValue 
    End With 
    'xmlDoc.Save ThisWorkbook.Path & "\WebQueryResult.xml" 
End Sub 

你需要關鍵的是SOAP信封的WebService期待的確切結構。

+0

我不使用SOAP,但使用新的Web服務,所以我不知道我的信封如何。我打算使用在我的WSDL中定義的客戶端類。 – sinsedrix

+0

在這種情況下,我無法提供太多幫助。但是,是什麼觸發了對web服務的調用(我發送給它的是什麼以及URL是什麼)以及web服務返回的是什麼? – jkpieterse

+0

最後,我不想依賴於接口,所以我將使用SOAP enveloppe方法。 – sinsedrix