如何从C#客户端连接到VB6 Com +服务器
问题描述:
我的C#类中有以下代码,它可以远程连接到远程计算机上的COM +服务器。如何从C#客户端连接到VB6 Com +服务器
Initailly它在Activator.CreateInstance
失败,因为我没有COM +服务器上的用户是谁启动客户端的用户相同。
我在客户机上安装了COM +代理存根,并将它们导入到我的C#项目中。 在IDL文件中,只有一个接口定义_ AddressLookup
,它继承自IDispatch
,但在C#中的对象查看器中似乎有两个接口,_ AddressLookup
和AddressLookup
。
private string CreateEarly(string server)
{
try
{
Type typeADLClass = typeof(LookupBusiness.AddressLookupClass);
Type typeDCOM = Type.GetTypeFromCLSID(typeADLClass.GUID,
server,
true);
object objAdd = Activator.CreateInstance(typeDCOM);
AddressLookupClass AddressLookupClass_result = (AddressLookupClass) Marshal.CreateWrapperOfType(objAdd, typeADLClass);
}
catch(Exception e)
{
return e.Message;
}
return "Create - success";
}
当我运行这段代码,我得到:
源对象不能被转换为目标类型,因为它 不支持所有必需的接口。
如果我尝试使用后期绑定:
object[] myArguments= {"www.zenei.co.uk", "39"};
object c;
c = typeDCOM.InvokeMember("Gett", BindingFlags.InvokeMethod, null, objAdd, myArguments);
我收到接口不支持IDispatch
。
谁能帮助?
答
看起来好像有网络端口问题,即它们被防火墙阻止。 这可能是导致此问题的原因。
在运行上述代码的机器上运行netstat,显示在端口135上初始化COM,但随后在新端口上返回调用(在1024-5000范围内,为RPC服务器端口寻找将在此找到更多详细信息)
我们阻塞了返回端口,因此COM +服务器在DCOMCNFG中旋转了起来,但随后发生超时。