Конференция "Corba" » Реализация TAutoObjectFactory в сервисе
 
  • r.o.o.t (20.11.07 12:55) [0]
    Господа нужна помощь пишу сервис в котором имеется COM сервер
    с определеным списком методов... ну эт неважно
    важно следующее что клиенты использующие этот COM сервер реализованный в сервисе работают как то странно а именно при подключении COM сервер работает потом выдает диалоговое окно и связь рвется.....

    взял пример из
    Автор: Набережных С.Н.
    Дата: 30.10.2005 г.
     Пример создания двух типов серверных COM объектов в сервисе.
    http://kladovka.net.ru/index.cgi?pid=dir&rid=24

    но данный пример вообще отказывается работать клиенты немогут даже подключится к серверу пишет что доступ запрещен.

    прошу дайте разумную информацию по данной тематике что как и зачем
    если такова есть....
  • clickmaker © (20.11.07 15:02) [1]

    > доступ запрещен

    это надо в dcomcnfg настраивать. Вкладка Security - Access Permissions
  • r.o.o.t (20.11.07 15:10) [2]
    ок разобрался
    а как это сделать программно через реестр например или есть какянибудь функция например??
  • clickmaker © (20.11.07 15:12) [3]
    CoInitializeSecurity
  • ага (20.11.07 16:38) [4]
    Там в comservice2.zip  утилита лежит для програмной настройки защиты. Она же тут с исходникам cacnfg.zip  http://kladovka.net.ru/index.cgi?pid=dir&rid=4
  • r.o.o.t (21.11.07 10:17) [5]
    Ошибка при выполнении приложения-сервера
    в каких случаях появляются такие ошибки
    код вот что делаю нетак???
    const
     AppID: TGUID = '{D6A9EA53-5E1A-4103-AF8C-9DB909C74227}';
     AppDescription = 'RpcProc Object';
    .....
    procedure TService1.ServiceAfterInstall(Sender: TService);
    begin
    CoInitialize(nil);
     try
        ComServer.LoadTypeLib;
      SvcComObjFact:=TAutoObjectFactory.Create(ComServer, TRpcProc, Class_RpcProc,
                              ciMultiInstance, tmApartment);

       // Теперь регистрируем...
       ComServer.UpdateRegistry(true);
       RegisterComApplication(AppID, CLASS_RpcProc, AppDescription, false);
       RegisterComService(DisplayName, AppID);
       // Удалять фабрики нет нужды, это сделает ComServer
     finally
       CoUninitialize;
     end;
    end;
    .....................................................

    procedure TService1.ServiceExecute(Sender: TService);
    begin
     CoInitialize(nil);
     try
       // Загружаем библиотеку типов и создаем фабрику
       ComServer.LoadTypeLib;
       SvcComObjFact:=TAutoObjectFactory.Create(ComServer, TRpcProc, Class_RpcProc,
                              ciMultiInstance, tmApartment);
       try
         // Регистрируем нашу фабрику в COM.
         // После этого клиенты смогут использовать ее для создания объектов.
         SvcComObjFact.RegisterClassObject;
         repeat
           ServiceThread.ProcessRequests(true);
         until Terminated;
       finally
         // Пора завершаться, извещаем поток и удаляем его
         // Раз сервис остановлен, то и фабрика больше не нужна.
         FreeAndNil(SvcComObjFact);
       end;
     finally
       CoUninitialize;
     end;
    end;

    соответвенно интерфейс
    IRpcProc = interface(IDispatch)
       ['{16AE828E-077F-41E6-AE8B-847BDBE029DF}']
    CLASS_RpcProc: TGUID = '{78ED3DEF-6988-43F3-8EC4-7BD8496DAA46}';

    в чем может быть загводка???
  • r.o.o.t (21.11.07 10:19) [6]
    ошибка появляется при обращение клиента к серверу вот код
    II:=CoRpcProc.Create;
      II.QueryInterface(IRpcProc,Server);

    где
    CoRpcProc = class
       class function Create: IRpcProc;
       class function CreateRemote(const MachineName: string): IRpcProc;
     end;
 
Конференция "Corba" » Реализация TAutoObjectFactory в сервисе
Есть новые Нет новых   [134430   +3][b:0][p:0.001]