提问人:Muxa 提问时间:10/6/2008 最后编辑:user513951Muxa 更新时间:2/9/2019 访问量:1300
从 Excel 调用 .NET COM Web 服务包装
Calling .NET COM web service wrapper from Excel
问:
我正在尝试从 Excel 2003 模块调用 Web 服务。 我实现它的方式是创建一个 .NET COM 库,其中包含我需要公开的所有类/方法。 当我尝试调用从 Excel 查询 Web 服务的方法时,执行只是在该行停止,没有任何错误。 可能与参考文献有关?我正在使用 Microsoft.Web.Services2.dll。我试过把它放在 C:\WINDOWS\SYSTEM32 - 没有运气
答:
1赞
Muxa
10/6/2008
#1
为了解决这个问题,我使用了Access而不是Excel。在Access中,它向我显示错误。事实证明,所有引用程序集的位置应该是调用方应用程序的位置(在本例中为 C:\Program Files\Microsoft Office\OFFICE11)。我的 Web 服务代理正在从 .config 文件加载终结点 URL,在该上下文中为 C:\Program Files\Microsoft Office\OFFICE11\MSACCESS。EXE.config
2赞
Andrew Cowenhoven
10/7/2008
#2
我不确定我是否了解了整个情况,但希望其中一些会有所帮助。我认为您有 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
评论