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