如何从C#客户端连接到VB6 Com +服务器

时间:2011-05-13 12:37:58

标签: c# com vb6 com+

我的C#类中有以下代码,它远程连接到远程计算机上的COM +服务器。

最初它在Activator.CreateInstance失败,因为我在COM +服务器上没有用户启动客户端的用户。

我在客户端计算机上安装了COM +代理存根,并将它们导入到我的C#项目中。 在IDL文件中,只有一个接口定义_ AddressLookup,它继承自IDispatch,但在C#中的对象查看器中,我似乎得到两个接口,_ AddressLookup和{ {1}}。

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);

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

看起来好像有网络端口问题,即它们被防火墙阻止了。 这可能导致了这个问题。

在运行上述代码的计算机上运行netstat,显示端口135上的COM初始化,但随后在新端口上返回调用(在1024 - 5000范围内,搜索RPC服务器端口将查找有关此内容的更多详细信息)< / p>

我们阻止了返回端口,因此COM +服务器在DCOMCNFG中正在旋转,但随后发生了超时。