2011-05-13 110 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中旋轉了起來,但隨後發生超時。

相關問題