我创建了ComVisible .Net(C#)dll,它包含服务引用。 当我尝试从外部COM客户端(VBScript)访问dll时,每当我创建对象时都会抛出异常。
引发的异常是InvalidOperationException(0x80131509)。
经过短暂的调查后,我注意到它在创建服务引用对象时失败了(“新”)。
ServiceClient
ServiceClient
是C#dll dll代码:
namespace UIIdentifier.Updater
{
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class Client
{
[ComVisible(false)]
//<<--This throws the exception -->>
private ServiceClient uiSpySrv = new ServiceClient();
[ComVisible(true)]
public string hello()
{
return "hello";
}
}
}
客户端代码:
Dim oUpdater
Set oUpdater = CreateObject("UIIdentifier.Updater.Client")
MsgBox oUpdater.hello
为什么会发生这种情况的任何建议?
答案 0 :(得分:1)
最可能的原因是WCF无法从app.config文件加载服务配置。
当您的库作为COM对象加载时,不存在app.config文件。
最好的办法是在代码中创建WCF客户端,而不是使用配置文件。这很简单。你可以在这里看到它是如何完成的:WCF Configuration without a config file
使用在app.config文件中配置的WCF服务在调试器中运行示例代码会生成以下异常,我认为这是非常自我解释的。
发生了System.InvalidOperationException 找不到引用合同的默认端点元素 ServiceModel客户端配置部分中的“ServiceReference1.IService1”。 这可能是因为找不到您的应用程序的配置文件,或者 因为没有匹配此合同的端点元素可以在 客户元素。
答案 1 :(得分:0)
我已成功将您的C#代码编译为类库并将其注册到COM。我运行了示例.vbs脚本,并出现了一个带有文本“hello”的消息框
ServiceClient的构造函数或构造函数中调用的某些代码是否会抛出异常?
在我的示例项目中,ServiceClass只是一个空类。
[ComVisible(false)] public class ServiceClient{}
您可以使用Visual Studio调试COM库。
中断所有例外
开始调试。抛出InvalidOperation异常时,Visual Studio应该会中断,然后您可以检查堆栈跟踪。