Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка Отказано в доступе в DCOM
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Я написал в VC++ сервер DCOM. Установил его на другом сервере(windows 2003 server). Если запускаю программу-клиент на машине с Windows 98 соединение с сервером проходит успешно, и функции сервера вызываются успешно. Когда же запускаю клиента на машине с Windows XP выскакивает код ошибки E_ACCESSDENIED (Отказано в доступе). Причем сам объект сервера создается успешно, а ошибка выскакивает на вызове метода этого объекта. На сервере с помощью утилиты dcomcnfg.exe для объекта сервера установлены все разрешения для всех. Вот мой код вызова из клиента: Код HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { // Не удалось инициализировать библиотеку COM _com_error err(hr); const char * pszErrorDescr = err.ErrorMessage(); //printf(«%s\n», pszErrorDescr); return 0; } char* pszIP = "ip адрес сервера"; USES_CONVERSION; COSERVERINFO si; COAUTHIDENTITY identity; identity.User =L"webmaster"; identity.UserLength =9; //wstrUser.Length(); identity.Domain = L"asu"; identity.DomainLength =3; identity.Password =L"90"; identity.PasswordLength =2; identity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; COAUTHINFO auth; auth.dwAuthnSvc =RPC_C_AUTHN_WINNT; auth.dwAuthzSvc =RPC_C_AUTHZ_NONE; auth.pwszServerPrincName = NULL; auth.dwAuthnLevel =RPC_C_AUTHN_LEVEL_PKT; auth.dwImpersonationLevel =RPC_C_IMP_LEVEL_IMPERSONATE; auth.pAuthIdentityData = &identity; auth.dwCapabilities = EOAC_NONE; memset(&si, 0, sizeof(si)); si.pAuthInfo =&auth; si.pwszName = T2W(pszIP); MULTI_QI qi; qi.pItf = NULL; qi.hr = 0; qi.pIID = &__uuidof(IMyATLSrv3); try { // Здесь создается успешно hr = CoCreateInstanceEx(CLSID_MyATLSrv3, NULL, CLSCTX_REMOTE_SERVER, &si, 1, &qi ); if(FAILED(hr)) { _com_error ex(hr); const char * pszErrorDescr1 = ex.ErrorMessage(); throw ex; } IMyATLSrv3Ptr spI; // смарт-указатель spI.Attach((IMyATLSrv3*)qi.pItf); // Вызываем методы интерфейса double x,y,s; char sx[50],sy[50],ss[50]; GetDlgItemText(hDlg,IDC_EDIT1,sx,49); GetDlgItemText(hDlg,IDC_EDIT2,sy,49); x=atof(sx); y=atof(sy); // А здесь выскакивает ошибка E_ACCESSDENIED s=spI->testsum3 (x,y); sprintf(ss,"%lf",s); SetDlgItemText(hDlg,IDC_EDIT3,ss); } catch(_com_error & ex) { // Обработка ошибок const char * pszErrorDescr = ex.ErrorMessage(); MessageBox (hDlg,pszErrorDescr,"Сообщение",MB_OK); } // Освободить библиотеку COM CoUninitialize(); } break; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 11:34 |
|
||
|
Ошибка Отказано в доступе в DCOM
|
|||
|---|---|---|---|
|
#18+
Юзаещь WINXP ? Сделай в главном потоке DCOM сервера и клиента Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Эта "вещь" означает , что серверу не требуется никакого уровня безопасности, так сказать . Но именно должно быть и на клиенте и на сервере . это не прокатит для in-proc Серверов ... И вообще в настройках безопасности DCOM сделай все доступно для всех и попробуй . ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 09:16 |
|
||
|
Ошибка Отказано в доступе в DCOM
|
|||
|---|---|---|---|
|
#18+
Уважаемый JibSkeart! Спасибо за ответ! Но всё это я уже делал. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 13:34 |
|
||
|
Ошибка Отказано в доступе в DCOM
|
|||
|---|---|---|---|
|
#18+
ДжекУважаемый JibSkeart! Спасибо за ответ! Но всё это я уже делал. Код: plaintext Дя я имею ввиду ,если DCOM реализован ввиде DLL. Кстати не забывай что есть такой маразм у DCOM, если сервер лежит в рашаренной папке, где доступы на расш. папку стоят не для всех итд . то уровен авторизации будет такой как и у этой расш. папки . ну, что то в таком духе описывалось на RSDN.ru и помойму это все справедливо только для WinXP я вообще начал подозревать , когда я тоже долго мучился и мне отказ доступа был ,что там даже от владельца зависит , короче переборщили с уровнями безопасности . но если перебросишь DCOM сервер на Win2000 то у тебя таких проблем уже не будет ,я так и поступил . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2005, 08:55 |
|
||
|
Ошибка Отказано в доступе в DCOM
|
|||
|---|---|---|---|
|
#18+
Код: plaintext для трёхуровнего приложения. В общем я нашёл альтернативу, сделал сервер как веб-службу(тоже dll) это пока работает.Незнаю правда как будет при одновременном обращении нескольких пользователей к этой веб-службе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 11:24 |
|
||
|
Ошибка Отказано в доступе в DCOM
|
|||
|---|---|---|---|
|
#18+
Джек Код: plaintext для трёхуровнего приложения. В общем я нашёл альтернативу, сделал сервер как веб-службу(тоже dll) это пока работает.Незнаю правда как будет при одновременном обращении нескольких пользователей к этой веб-службе. Не знаю , у меня был out-proc сервер , ты знаешь все нормально было , хотя для моего случая было не принципиально . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=32943581&tid=1347854]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 401ms |

| 0 / 0 |
