Проблемма в том, что все возможные .NET клиенты (включая ASP.NET процессы), а также обычное VB6 приложение (через COM interop) замечательно работают под любыми аккаунтами.
Единственно, ASP (old ASP) приложение при попытке соединия всегда выдаёт ошибку: Failed to connect to an IPC Port: Access is denied. — т.е. ошибка доступа к данной Named Pipe.
Никакое изменение прав приложения (включая запуск под админским аккаунтом не помагают). Возможно IIS как-то дополнительно ограничевает права процесса вне зависимости от использованного аккаунта? Облазил наверно все возможные источники в сети по данному вопросу, но везде как правило рассматривается проблемма с ASP.NET приложением
Здравствуйте, arkhivania, Вы писали:
A>Здравствуйте, Curufinwe, Вы писали:
A>Я долго мучался со всякими Ipc и в результате у меня получился подобный smippet
Спасибо, но мне увы не помогло. Боюсь тут проблемма скорее на уровне named pipes/windows security/IIS.
Попробовал TcpChannel, вроде работает. Конечно немного криво для локального общения
у меня совершенно идентичная ситуация, вот уже который день бьюсь в поисках решения...
Удалось ли вам решить эту проблему?
Буду крайне признателен за любую помощь,
Здравствуйте, Bolzen, Вы писали:
B>у меня совершенно идентичная ситуация, вот уже который день бьюсь в поисках решения... B>Удалось ли вам решить эту проблему? B>Буду крайне признателен за любую помощь,
Увы, времени было мало, поэтому не найдя нормального решения пришлось использовать TcpChannel
Re[2]: Проблемма с IPC Remoting
От:
Аноним
Дата:
12.05.08 07:29
Оценка:
А если попробовать вот такой код?
На сервере:
..
SecurityIdentifier si = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
IdentityReference ir = si.Translate(typeof(NTAccount));
к сожалению нет. Очень похоже, что дело не в том, как регистрировать канал, потому что IPC прекрасно работает из консольного приложения, но при этом ни в какую и ни при каких конфигурациях из-под IIS, если создавать объект в PHP или ASP.
Путём нехитрых тестов выяснил, что виной всему logon type. Всё отлично, если юзер использовал INTERACTIVE logon и IPC просто перестает работать (Failed to connect to an IPC Port: Access is denied.), если был использован NETWORK logon type, что и происходит в IIS. При всём при этом TCP канал работает нормально при любом logon type, а IPC не хочет работать ни с Impersonation ни с Identification ни даже с non-secure каналом в случае с network logon. Интересно, это баг или фича?..
Здравствуйте, Curufinwe, Вы писали:
C>Не уверен, что правильно выбрал форум для этом проблеммы, но всё-таки.
C>Исходные данные: C>Windows Server 2003
C>Есть .NET Windows service, к которому можно подключится через IpcChannel:
Я коннектился к pipe, открытому в сервисе и да, была такая проблема. Суть ее в том, что Named Pipe — этот тот же файл и поэтому при создании Named Pipe надо указать пермишены. Вот вырезка из рабочего кода на паскале. Думаю, суть будет понятна.
if not InitializeSecurityDescriptor (@sd, SECURITY_DESCRIPTOR_REVISION) or
not SetSecurityDescriptorDacl (@sd, true, pAcl (nil), false) then
ErrMsg ('Security');
sa.nLength := sizeof(sa);
sa.lpSecurityDescriptor := @sd;
sa.bInheritHandle := true;
C.HPipe := Windows.CreateNamedPipe (
'\\.\pipe\uchet',
PIPE_ACCESS_DUPLEX or FILE_FLAG_OVERLAPPED,
PIPE_TYPE_MESSAGE or PIPE_READMODE_MESSAGE or PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
PKT_SIZE+HDR_SIZE,
PKT_SIZE+HDR_SIZE,
PIPE_TIMEOUT, //timeout
@sa);
Обратите внимание на последний параметр в функции CreateNamedPipe — это он, больной зуб.
Здравствуйте, Bolzen, Вы писали:
B>к сожалению нет. Очень похоже, что дело не в том, как регистрировать канал, потому что IPC прекрасно работает из консольного приложения, но при этом ни в какую и ни при каких конфигурациях из-под IIS, если создавать объект в PHP или ASP. B>Путём нехитрых тестов выяснил, что виной всему logon type.
долго не читал rsdn, а то подсказал бы раньше
Наоборот, дело именно в том, КАК РЕГИСТРИРОВАТЬ канал Как решить вашу проблему смотрите в примере msdn "Remoting IpcChannel with Custom ACL Sample"
Здравствуйте, _Morpheus_, Вы писали:
_M_>долго не читал rsdn, а то подсказал бы раньше
_M_>Наоборот, дело именно в том, КАК РЕГИСТРИРОВАТЬ канал Как решить вашу проблему смотрите в примере msdn "Remoting IpcChannel with Custom ACL Sample"
Спасибо за ссылку, но проблема не исчезла. В примере используется unsecure channel, что не позволяет определить какой пользователь вызвал функцию по IPC, потому что props["tokenImpersonationLevel"] = TokenImpersonationLevel.Identification; имеет смысл только для secure канала.
При использовании IPC remoting из-под IIS получаем неизменный "access denied" при том, что консольное приложение, запущенное под тем же пользователем, работает отлично.