【问题标题】:How do I call WCF client from Excel 2003 VBA?如何从 Excel 2003 VBA 调用 WCF 客户端?
【发布时间】:2013-11-13 20:45:50
【问题描述】:

正如问题所问,如何从 Excel 2003 VBA 调用 WCF 客户端?

我看到有一个地方可以调用web服务,但是我通过谷歌搜索,我得到的所有结果都不可能从VBA调用WCF客户端。

在对我的代码做任何事情之前,我想知道使用什么方法,不想浪费时间,后来发现不可能这样做。

【问题讨论】:

  • 调用 Web 服务的代码是什么样的?应该不会有太大不同,但我不确定。
  • 如果 Google 没有告诉您如何从 Excel 调用 Web 服务,那么 Excel 文档或在线资源可能会?
  • 您想使用 WCF 客户端的原因是什么?远程服务是什么样的?它是否使用安全、事务、排队?根据目标服务,使用 VBA 中的 MSXML 可能更简单。
  • @wongtatseng:您的意思是希望 Excel 调用 WCF 客户端还是 WCF 服务?

标签: wcf web-services vba excel


【解决方案1】:

您可能希望了解使用 WCF 服务名字对象,它允许您从 VBA 调用 WCF 服务,而无需在 Excel 客户端计算机上安装除 .NET Framework 之外的任何东西。

Dim addr As String
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex"","
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/"","
addr = addr + "contract=""IService1"", contractNamespace=""http://tempuri.org/"","
addr = addr + "binding=""NetTcpBinding_IService1"",bindingNamespace=""http://tempuri.org/"""

Dim service1 As Object
Set service1 = GetObject(addr)

MsgBox service1.GetData(12)

我写了一个complete step-by-step example

/达米安

【讨论】:

  • Damian,你能将一个原始数组传递给你的 wcf servcie 方法吗?
  • 我不记得了,但我传递了一个变体数组——也许只是把原始值放在那里:return new object[] { 123, 456, 789 };
【解决方案2】:

我尝试了很长一段时间从 excel vba 调用基于 SOAP 的 wcf 服务,但没有任何运气。

相反,我将服务更改为 REST 绑定 (webHttpBinding)。这样我就可以将数据直接加载到 xml 映射中,就像它是任何其他 xml 文件一样。对我来说效果很好,但我只是想导入一些数据。

至于肥皂; question 中的答案提到了 Web 服务工具包,我可以找到建议使用的所有示例。

【讨论】:

    【解决方案3】:

    在这种情况下,我不会使用 VSTO。 COM Interop 可能是最好的方法,只要您不希望 SOAP 消息有任何安全性。

    1. 编写 WCF 客户端,并进行必要的绑定
    2. 为 COM 互操作公开程序集
    3. 在 Excel VBA 中引用公开的程序集

    【讨论】:

      【解决方案4】:

      我使用Office 2003 Web Services Toolkit 成功完成了这项工作,但并非没有一些痛苦。

      请注意,这不受 Microsoft 支持,并且有许多限制可能使其不适合生产使用。例如。它不支持返回空集合的 Web 服务:请参阅 this StackOverflow question

      如果您想在不受支持的情况下采用这条路线,请下载工具包并在此处发布您遇到的任何问题。

      Microsoft 建议使用 VSTO,但这并不容易与 VBA 集成...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多