Как подключиться с клиента C # к серверу VB6 Com + - PullRequest
1 голос
/ 13 мая 2011

В моем классе C # есть следующий код, который удаленно подключается к серверу COM + на удаленной машине.

Изначально это было с ошибкой на 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.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 19 мая 2011

Похоже, что были проблемы с сетевым портом, т.е. они были заблокированы брандмауэром. Который мог вызвать эту проблему.

При запуске netstat на машине, на которой выполняется вышеуказанный код, показано, что COM инициализируется на порту 135, но затем на него возвращаются вызовы на новый порт (в диапазоне 1024–5000 при поиске портов сервера RPC будет более подробно об этом)

У нас был заблокирован обратный порт, поэтому сервер COM + вращался в DCOMCNFG, но затем произошли тайм-ауты.

...