【问题标题】:Calling WCF service using VBA code in Excel 2010在 Excel 2010 中使用 VBA 代码调用 WCF 服务
【发布时间】:2017-06-06 08:56:17
【问题描述】:

我正在尝试从 Excel 2010 中的 VBA 以 XML 格式调用 ASP.Net WCF 服务。

我读了这个问题: calling web service using VBA code in excel 2010 但我不能使用第三方库、XML 或 JSON。

有没有办法通过 VBA 与 Web 服务一起本机做到这一点?

编辑 我已经安装了 SOAP Toolkit 3.0SOAP Toolkit 3.0 软件更新

我已将这些库添加到我的工作簿中:

  • 微软 XML,v3.0
  • Microsoft Soap 类型库 v3.0
  • WinHttp Soap 连接器类型库
  • WinInet Soap 连接器类型库
  • Microsoft Soap WSDL 文件生成器 v3.0

我想我必须通过“工具->添加 Web 引用”菜单将我的服务的 Web 引用添加到我的工作簿中,但没有出现此选项。我该怎么做才能看到它?

【问题讨论】:

    标签: excel web-services vba


    【解决方案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
    

    您需要的关键是 Web 服务所期望的 SOAP 信封的确切结构。

    【讨论】:

    • 我不使用 SOAP,而是使用新的 Web 服务,所以我不知道我的信封怎么样。我打算使用在我的 WSDL 中定义的客户端类。
    • 在那种情况下,我帮不上什么忙。但是,什么触发了对 Web 服务的调用(我向它发送什么以及 URL 是什么)以及 Web 服务返回什么?
    • 最后,我不想对接口有依赖,所以我将使用 SOAP enveloppe 方法。
    • 列出所有需要的参考资料会很好。
    • 它说:“使用 Microsoft XML 3.0 库”
    【解决方案2】:

    我找到了一个处理这个主题的useful post

    Web Service Software Factory 2010 未维护,似乎已过时。

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多