2011-05-13 113 views
1

我的C#类中有以下代码,它可以远程连接到远程计算机上的COM +服务器。如何从C#客户端连接到VB6 Com +服务器

Initailly它在Activator.CreateInstance失败,因为我没有COM +服务器上的用户是谁启动客户端的用户相同。

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

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

谁能帮助?

回答

0

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

在运行上述代码的机器上运行netstat,显示在端口135上初始化COM,但随后在新端口上返回调用(在1024-5000范围内,为RPC服务器端口寻找将在此找到更多详细信息)

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

相关问题