Конференция "Corba" » dcom сервер в сервисе
 
  • Дмитрий С © (02.04.09 12:24) [0]
    Создал по примеру сервис.
    В ServiceMain после инициализации сервиса делаю:
     CoInitialize(nil);
     try
       TServerApplicationFactory.Initialize;
       try
         WaitForSingleObject(WorkEvent, INFINITE);
       finally
         TServerApplicationFactory.Finalize;
       end;
     finally
       CoUninitialize;
     end;


    Где WorkEvent - установится когда сервис получит сообщение Stop или Shutdown.
    В TServerApplicationFactory.Initialize выполняю настройку безопасности и регистрирую фабрику:
     
    Hr := CoInitializeSecurity(
         nil,
         -1,
         nil,
         nil,
         6{RPC_C_AUTHN_LEVEL_PKT_PRIVACY},
         3{RPC_C_IMP_LEVEL_IMPERSONATE},
         nil,
         0, {EOAC_NONE}
         nil
       );

     Hr := CoRegisterClassObject(
       CLASS_Application,
       FFactory,
       CLSCTX_REMOTE_SERVER,
       REGCLS_MULTIPLEUSE,
       TServerApplicationFactory.FRegID
     );



    Инсталлирую сервис.
    В реестре в AppId вписываю имя службы.

    Затем делаю попытку создать объект:
    CoInitialize(nil);
     ZeroMemory(@ServerInfo, SizeOf(ServerInfo));

     ServerInfo.pwszName := 'CAT';
     ServerInfo.pAuthInfo := @AuthInfo;
     AuthInfo.dwAuthnSvc := 10; //RPC_C_AUTHN_WINNT          10
     AuthInfo.dwAuthzSvc := 0; //RPC_C_AUTHZ_NONE      0
     AuthInfo.pwszServerPrincName := nil;
     AuthInfo.dwAuthnLevel := 6; //RPC_C_AUTHN_LEVEL_PKT_PRIVACY     6
     AuthInfo.dwImpersonationLevel := 3; // RPC_C_IMP_LEVEL_IMPERSONATE 3
     AuthInfo.pAuthIdentityData := nil;
     AuthInfo.dwCapabilities := 0; //EOAC_NONE

     ZeroMemory(@QI, SizeOf(QI));
     QI.IID := @IID_IApplication;

     OleCheck(
       CoCreateInstanceEx(
         CLASS_Application,
         nil,
         CLSCTX_REMOTE_SERVER,
         @ServerInfo,
         1,
         @QI));

     CoUninitialize;



    В итоге сервис запускается (без ошибок при вызовах), а через некоторое клиент выдает:
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project1.exe raised exception class EOleSysError with message 'Ошибка при выполнении приложения-сервера'.
    ---------------------------
    Break   Continue   Help  
    ---------------------------
    При этом нет даже попыток вызовов методов фабрики.

    Вопрос: почему, собственно, объект не создается?
 
Конференция "Corba" » dcom сервер в сервисе
Есть новые Нет новых   [118426   +56][b:0][p:0.001]