【问题标题】:Calling .NET COM web service wrapper from Excel从 Excel 调用 .NET COM Web 服务包装器
【发布时间】:2010-09-15 10:23:59
【问题描述】:

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

【问题讨论】:

  • 有没有机会加入你正在使用的代码?

标签: .net web-services excel com


【解决方案1】:

我不确定我是否了解全部情况,但希望其中的一些内容会有所帮助。我认为您有 Excel vba 通过 COM 接口调用 .NET,然后调用 SOAP Web svc。

您应该已安装正确的PIA,并由您的 .NET 程序集引用。您的 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 服务调用,以确保您的接口和互操作包装器工作正常。

一旦您的框架工作正常,您可能需要考虑使用 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

【讨论】:

    【解决方案2】:

    为了解决这个问题,我使用了 Access 而不是 Excel。在 Access 中,它向我显示错误。原来所有引用程序集的位置都应该是调用者应用程序的位置(在本例中是 C:\Program Files\Microsoft Office\OFFICE11)。其次,我的 Web 服务代理正在从 .config 文件加载端点 URL,在该上下文中是 C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE.config

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 2018-10-10
      • 2010-11-06
      • 2011-09-18
      • 2011-03-14
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多