从Excel调用.NET COM Web服务包装器

时间:2008-10-06 00:31:35

标签: .net web-services excel com

我正在尝试从Excel 2003模块调用Web服务。 我实现它的方式是创建一个.NET COM库,其中包含我需要公开的所有类/方法。 当我尝试调用从Excel查询Web服务的方法时,执行只是在该行上停止而没有任何错误。 可能与引用有关吗?我正在使用Microsoft.Web.Services2.dll。我试过把它放在C:\ WINDOWS \ SYSTEM32中 - 没有运气

2 个答案:

答案 0 :(得分:2)

我不确定我是否能得到完整的图片,但希望其中一些有用。我认为你有Excel vba通过COM接口调用.NET,然后调用SOAP web svc。

您的.NET程序集应该安装并引用正确的PIA。您的COM接口应如下所示:



[Guid("123Fooetc...")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IBar
    {
        [DispId(1)]
         void SomeMethod(Excel.Range someRange);
    }

使用类似这样的类实现接口:


[Guid("345Fooetc..")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("MyNameSpace.MyClass")]    
    public class MyClass : IBar
    {
        public void SomeMethod(Excel.Range someRange)
        {...}
    }

我要做的第一件事就是用.NET代码中的一个简单方法替换你的web服务调用,以确保你的接口和interop包装器正常工作。

一旦您的骨架正常工作,您可能需要考虑使用HTTP方法而不是使用SOAP来调用您的服务。例如,这是一个使用HTTP GET的简单调用:


  string resource = yourUrl;
  using (WebClient web = new WebClient())
  {
    web.Credentials = CredentialCache.DefaultCredentials;
    someXml = web.DownloadString(resource);
  }
  return someXml; // or do something interesting with Excel range

答案 1 :(得分:1)

要解决问题,我使用的是Access而不是Excel。在Access中,它向我显示错误。事实证明,所有参考程序集的位置应该是调用者应用程序的位置(在这种情况下,它是C:\ Program Files \ Microsoft Office \ OFFICE11)。第二,我的Web服务代理正在从.config文件加载端点URL,在该上下文中是C:\ Program Files \ Microsoft Office \ OFFICE11 \ MSACCESS.EXE.config