如何从Excel 2003 VBA中调用WCF客户端?

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

我看到有一个地方可以调用Web服务,但是我已经通过Google进行search,所有得到的结果都无法从VBA调用WCF客户端。

我想知道在使用我的代码之前要使用什么方法,不想浪费时间,以后发现不可能这样做。

您可能需要查看使用WCF Service Moniker,它允许您从VBA调用WCF服务,而无需在.NET Framework以外的其他Excel客户端计算机上安装任何内容。

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) 

我已经写出了一个完整的循序渐进的例子 。

/达米安

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

相反,我将我的服务更改为REST绑定(webHttpBinding)。 这样我就可以将数据加载到一个XML映射,就像它是任何其他的XML文件。 为我工作得很好,但我只是想input一些数据。

至于SOAP; 在这个问题中的一个答案提到了Web服务工具包中所有我能find的例子。

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

  1. 用必要的绑定编写WCF客户端
  2. 为COM Interop公开组件
  3. 在Excel VBA中引用暴露的程序集

我使用Office 2003 Web服务工具包取得了有限的成功,但并非没有一点痛苦。

请注意,这不是由Microsoft支持,并有一些限制,可能使它不适合生产使用。 例如,它不支持返回空集合的Web服务:请参阅此StackOverflow问题 。

如果你想走这条路线,尽pipe它不被支持,下载工具包,并发布你在这里有任何问题。

微软build议使用VSTO,但这并不能轻松地与VBA集成…