не работает без отладчика
От: VictorBoiko  
Дата: 18.01.10 08:57
Оценка:
Прошу помощи еще раз. Все получилось и сервер (как служба ЕХЕ) и клиент (MFC приложение с поддержкой ATL). Всё отлично коннектится и гоняются данные даже со скростью на порядок больше, чем я предполагал..... Теперь я зарегистрирую службу как сервис (xxx.exe -service), настраиваю под кем стартовать (вход в систему — стартую под собой Victor и пароль — автостарт) и делаю ей Пуск. Теперь когда стартую клиента и пытаюсь к этой службе подключиться у меня вылетает ошибка на


HRESULT hr = CoCreateInstanceEx(CLSID_ATLService6Interface,NULL,CLSCTX_REMOTE_SERVER,&csInfo,1,&mqiInfo); //hr = 0x80080005 Ошибка при выполнении приложения-сервера


При этом в журнале событий пишет:

Не найдено описание для события с кодом ( 0 ) в источнике ( ATLService6 ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. Попробуйте использовать ключ /AUXSOURCE= для получения этого описания, — дополнительные сведения об этом содержатся в справке. В записи события содержится следующая информация: Service started.

Что я делаю не так и почему под отладчиком у меня всё замечательно?
Re: не работает без отладчика
От: cencio Украина http://ua-coder.blogspot.com
Дата: 18.01.10 09:06
Оценка:
Здравствуйте, VictorBoiko, Вы писали:

VB>Что я делаю не так и почему под отладчиком у меня всё замечательно?

хз, много чего может быть, добавь логи и по ним разбирайся
Re[2]: не работает без отладчика
От: VictorBoiko  
Дата: 18.01.10 19:02
Оценка:
Здравствуйте, cencio, Вы писали:

CC>хз, много чего может быть, добавь логи и по ним разбирайся


Ну конечно ответ очень полезный, особенно ХЗ ))

Я еще раз хочу подчеркнуть, что я человек начинающий и очень хотельсь-бы, получить ответ хотя-бы в какую сторону копать. Например в предыдущей моей теме, в которой у меня не получалось передать интерфейс и вознакала ошибка (hr=0x8002801d библиотека не зарегистрирована) надо было просто клиента запустить с ключиком /Regserver. Спасибо Vi2, с интерфейсом я разобрался, а с ошибкой дня 2 колупался, но таки с этим ключиком запустил клиента .... и .... вуаля!!! Все работает ))))

Здесь очень много начинающх и им очень были-бы полезны ответы простые.... очень простые. 99% ошибок начинающих сводятся к тому, что они не прописывают всего одну строчку или что-то как-то не так запускают. Когда и меня спрашивают, почему приложение MFC, работающее на их компе не стартует на другом ...... всё правильно, просто по умолчанию Вижуал студио генерит код с ДИНАМИК ЛИНК ДЛЛ, а надо поставить со СТАТИК ЛИНК ДЛЛ или перенести эти ДЛЛ на комп, на котором эта прога испролняется.

Моя проблема скорее всего такого-же плана. Не думайте что я сделал все правильно, может я какой ключик где не прописал или флажок какой не поставил )))).

Не могЁт быть такого, чтобы под отладчиком работало, а без него — нет.
Значит отладчик что-то делает такое, чего я пропускаю.

пАмАгите ))))
Re: не работает без отладчика
От: filkov СССР  
Дата: 18.01.10 19:35
Оценка:
Здравствуйте, VictorBoiko, Вы писали:

VB>Что я делаю не так и почему под отладчиком у меня всё замечательно?


ХЗ в общем-то ответ правильный.
Много чего может не хватать.

Совершенно не зная Вашей задачи, я бы поинтересовался:
1. Вам действительно требуется контекст CLSCTX_REMOTE_SERVER ?
CLSCTX_ALL не помогает?
2. Ваш сервис действительно работает на удалённой машине и при этом логинится как Victor ? (для сервиса типично работать под Local System account).
3. Бы убедились, что сервис работает на момент запуска клиента?
4. Вот этот линк не поможет?

Удачи
Санкционный Смотритель.
Re[2]: не работает без отладчика
От: VictorBoiko  
Дата: 18.01.10 21:00
Оценка:
Здравствуйте, filkov, Вы писали:

F>Здравствуйте, VictorBoiko, Вы писали:


VB>>Что я делаю не так и почему под отладчиком у меня всё замечательно?


F>ХЗ в общем-то ответ правильный.

F>Много чего может не хватать.

спасибо, за конструктивный ответ

F>Совершенно не зная Вашей задачи, я бы поинтересовался:


Моя задача состоит в следущем:
Есть сервер (сервис.ехе), в который включен простой объект АТЛ, имеющий свой интерфейс, который в свою очередь имеет некоторые методы
Есть клиент (дайлог приложение MFC с поддержкой ATL).

Клиент подключается к серверу и передает указатель на свой интерфейс. После этого сервер его вызывает. Вот код клиента — все инициализации и проверки скипаю для уменьшения кода (Запускаю сервис от имени Victor с паролем 123), коннекчусь так же — иначе не работает:


    MULTI_QI mqiInfo;
    IID iid = IID_IATLService6Interface;
    mqiInfo.pIID = &iid;
    mqiInfo.pItf = NULL;

    COSERVERINFO csInfo;
    COAUTHINFO caInfo;
    COAUTHIDENTITY caId;
    LPWSTR pcServName = SysAllocString(L"127.0.0.1");
    csInfo.pwszName = pcServName;
    csInfo.pAuthInfo = &caInfo;

    caInfo.dwAuthnLevel = RPC_C_AUTHN_LEVEL_CONNECT;
    caInfo.dwAuthnSvc = RPC_C_AUTHN_WINNT;
    caInfo.dwAuthzSvc = RPC_C_AUTHZ_NONE;
    caInfo.dwCapabilities = EOAC_NONE;
    caInfo.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
    caInfo.pAuthIdentityData = &caId;
    caInfo.pwszServerPrincName = NULL;

    caId.User = (USHORT*)SysAllocString(L"Victor");
    caId.Password = (USHORT*)SysAllocString(L"123");
    caId.Domain = (USHORT*)SysAllocString(L"");
    caId.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
    caId.UserLength = 6;
    caId.PasswordLength = 3;
    caId.DomainLength = 0;

    HRESULT hr = CoCreateInstanceEx(CLSID_ATLService6Interface,NULL,CLSCTX_REMOTE_SERVER,&csInfo,1,&mqiInfo);

        //вот здесь и возникает ошибка без отладчика //hr = 0x80080005 Ошибка при выполнении приложения-сервера
        //это в клиенте
        //когда сервер работает под отладчиком - всё замечательно


    pServerInterface = reinterpret_cast<IATLService6Interface *>(mqiInfo.pItf);

    mqiInfo.pItf = NULL;
    IClientSecurity *piClSec = NULL;
    hr = pServerInterface->QueryInterface(IID_IClientSecurity, (void **) &piClSec);
    hr = piClSec->SetBlanket(pServerInterface,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, &caId, EOAC_NONE);

    CComObject<CClientInterface6>* pSinkClass;
    CComObject<CClientInterface6>::CreateInstance(&pSinkClass);
    hr = pSinkClass->QueryInterface (IID_IDispatch, (LPVOID*)&m_pSinkUnk);
    hr = pServerInterface->Connect(m_pSinkUnk);



вот сервер, хотя нужен ли он?


idl:

[
    object,
    uuid(1F219B7B-02CE-4AF4-85FD-402B664F7D41),
    dual,
    nonextensible,
    helpstring("Интерфейс IATLService6Interface"),
    pointer_default(unique)
]
interface IATLService6Interface : IDispatch{
    [id(1), helpstring("метод Connect")] HRESULT Connect([in] IDispatch* IClient);

.........
};




F>1. Вам действительно требуется контекст CLSCTX_REMOTE_SERVER ?

F> CLSCTX_ALL не помогает?

Если честно, то понятия не имею чем это может отличаться — брал из примеров, под отладчиком всё работало — думал всё делаю правильно. Поменял на CLSCTX_ALL — не работает без отладчика, а с под отладчиком аж бегом тоже работает, т.е. флаги тут не при чем))). Но про эти флаги эти почитаю.

F>2. Ваш сервис действительно работает на удалённой машине и при этом логинится как Victor ? (для сервиса типично работать под Local System account).


Да, однозначно. И необязательно на удаленной, даже на одной и той же машине если запускаю без отладчика сервер, клиент не подключается. Я специально задал этот логин сервису, т.к. незнаю как потом из клиента коннектиться, если будет Local System account — это следующий пункт моих изысканий (если несложно, намекните что почитать). При этом однозначно из студии он стартует под Victor и я думал коль уж он так работает — так и буду к нему подключаться.

F>3. Бы убедились, что сервис работает на момент запуска клиента?


Точно работает

F>4. Вот этот линк не поможет?


Читаю...

F>Удачи


Может быть еще какие куски исходников надо? Все выложу. Не могу побороть уже 3-ий день это (((
Re[3]: не работает без отладчика
От: filkov СССР  
Дата: 18.01.10 22:33
Оценка:
Никакой гарантии, увы, что раскопаю Вашу проблему, потому как своих проблем хватает, а времени — нет.

VB>Может быть еще какие куски исходников надо? Все выложу. Не могу побороть уже 3-ий день это (((


Давайте. Весь проект.
Дело в том, что у меня вокруг один .NET
При попытке чего-либо промоделировать — лепит Managed C++ и прочую .NET-овскую гадость.
Санкционный Смотритель.
Re[4]: не работает без отладчика
От: VictorBoiko  
Дата: 19.01.10 08:27
Оценка:
Здравствуйте, filkov, Вы писали:


F>Давайте. Весь проект.


Кинул на Ваш hotmail.com. Заранее благодарю
Re[5]: не работает без отладчика
От: filkov СССР  
Дата: 19.01.10 16:56
Оценка:
Здравствуйте, VictorBoiko, Вы писали:

VB>Кинул на Ваш hotmail.com. Заранее благодарю


Получил.
Посмотрю, как только появятся просветы в текучке.

Удачи.
Санкционный Смотритель.
Re[6]: не работает без отладчика
От: VictorBoiko  
Дата: 20.01.10 17:06
Оценка:
Здравствуйте, filkov, Вы писали:

F>Получил.

F>Посмотрю, как только появятся просветы в текучке.

Ок
Re[5]: не работает без отладчика
От: filkov СССР  
Дата: 22.01.10 17:15
Оценка:
Здравствуйте, VictorBoiko, Вы писали:

F>>Давайте. Весь проект.

VB>Кинул на Ваш hotmail.com. Заранее благодарю

Увы, не очень преуспел.
Клиент исправно "подымает" сервер, если сервер зарегистририван как local server. Если же зарегистрировать его, как service, имеем DCOM ошибку:
"The server {<GUID>} did not register with DCOM within the required timeout."
Какие-то нелады с DCOM security. Пока не удалось победить
Санкционный Смотритель.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.