Ошибка вызова NT сервиса из .aspx
От: shmelev Россия  
Дата: 20.08.03 11:33
Оценка:
Привет всем!
Народ помогите пож-ста, иначе уволят!
Есть C# NT-сервис, в котором реализован remote object. Надо из .aspx запустить сервис.
Делаю так:

private void Button1_Click(object sender, System.EventArgs e)
{
  if (service.Status != ServiceControllerStatus.Running)
    service.Start();
}



При запуске выдает ошибку:

=======================================================

Server Error in '/InteropTest/WebTestServiceTest' Application.
--------------------------------------------------------------------------------

Отказано в доступе
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ComponentModel.Win32Exception: Отказано в доступе

Stack Trace:


[Win32Exception (0x80004005): Отказано в доступе]

[InvalidOperationException: Cannot open TestServiceTest2 service on computer '.'.]
System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) +175
System.ServiceProcess.ServiceController.Start(String[] args) +114
System.ServiceProcess.ServiceController.Start() +24
WebTestServiceTest.WebForm1.Button1_Click(Object sender, EventArgs e) in d:\inetpub\wwwroot\interoptest\webtestservicetest\webform1.aspx.cs:72
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()

=======================================================

Из консоли все работает.
Как лечить?
Re: Ошибка вызова NT сервиса из .aspx
От: mogadanez Чехия  
Дата: 20.08.03 11:40
Оценка:
Здравствуйте, shmelev, Вы писали:

ASP.NET работает из под спец юзера ASPNET у него не хватает прав.
дай ему соотв. права, или запусти приложение от другого пользователя.
... << RSDN@Home 1.0 beta 7a >>
Re: Ошибка вызова NT сервиса из .aspx
От: Gollum Россия  
Дата: 20.08.03 11:40
Оценка:
Здравствуйте, shmelev, Вы писали:

S>Из консоли все работает.

S>Как лечить?

Видимо, раздать пользователю ASPNET права на запуск сервиса.
В мире что-то не так? Или это у меня в голове?
Eugene Agafonov on the .NET

Re[2]: Ошибка вызова NT сервиса из .aspx
От: shmelev Россия  
Дата: 20.08.03 12:32
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Видимо, раздать пользователю ASPNET права на запуск сервиса.


Спасибо за ответ.
Давал пользователю ASPNET права администратора,
прописывал ASPNET в безопасность файла сервиса,
но все тоже самое повторяется...
Re[3]: Ошибка вызова NT сервиса из .aspx
От: Gollum Россия  
Дата: 20.08.03 12:55
Оценка:
Здравствуйте, shmelev, Вы писали:

S>Спасибо за ответ.

S>Давал пользователю ASPNET права администратора,
S>прописывал ASPNET в безопасность файла сервиса,
S>но все тоже самое повторяется...

Можно попробовать запустить процесс аспнет с системными привилегиями (в machine.config в секции processModel поменять имя пользователя с "machine" на "SYSTEM"), но это не самое безопасное решение.

Если сеть входит в домен Win2K, то хорошее решение — использовать имперсонацию, чтобы только авторизованные пользователи могли запускать сервис — в файле web.config в секции <authorization> ставишь <deny users="?"> (удалаяя при этом <allow users = "*" >) — таким образом только авторизованный пользователи смогут получить доступ к приложению. В <system.web> нужно добавить <identity impersonate="true" /> — таким образом код страницы будет исполняться от имени пользователя, запросившего ее. Кроме того в веб конфиге должно быть прописано <authentication mode="Windows" />

З.Ы. Может здесь найдется полезная информация.
Сегодня я прощаюсь — послезавтра я опять буду здесь
Eugene Agafonov on the .NET

Re[3]: Ошибка вызова NT сервиса из .aspx
От: gerik  
Дата: 20.08.03 13:02
Оценка: -2
Здравствуйте, shmelev, Вы писали:

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


G>>Видимо, раздать пользователю ASPNET права на запуск сервиса.


S>Спасибо за ответ.

S>Давал пользователю ASPNET права администратора,
S>прописывал ASPNET в безопасность файла сервиса,
S>но все тоже самое повторяется...
перегрузи машину, у тебя скорее всего действуют старые права, новые еще не вступили в силу
... << RSDN@Home 1.1 beta 1 >>
Re[4]: Ошибка вызова NT сервиса из .aspx
От: mogadanez Чехия  
Дата: 20.08.03 13:16
Оценка:
Здравствуйте, gerik, Вы писали:

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


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


G>>>Видимо, раздать пользователю ASPNET права на запуск сервиса.


S>>Спасибо за ответ.

S>>Давал пользователю ASPNET права администратора,
S>>прописывал ASPNET в безопасность файла сервиса,
S>>но все тоже самое повторяется...
G>перегрузи машину, у тебя скорее всего действуют старые права, новые еще не вступили в силу

да ладно... глупости говоришь....
... << RSDN@Home 1.0 beta 7a >>
Re[3]: Ошибка вызова NT сервиса из .aspx
От: Gollum Россия  
Дата: 20.08.03 13:29
Оценка:
Здравствуйте, shmelev, Вы писали:

Еще, полезная статья о том, как запустить aspnet приложение от указанного пользователя здесь:

ASP.NET Impersonation
Любая весть изначально благая, просто ты к этому еще не привык
Eugene Agafonov on the .NET

Re[5]: Ошибка вызова NT сервиса из .aspx
От: gerik  
Дата: 20.08.03 13:45
Оценка: +1
Здравствуйте, mogadanez, Вы писали:

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


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


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


G>>>>Видимо, раздать пользователю ASPNET права на запуск сервиса.


S>>>Спасибо за ответ.

S>>>Давал пользователю ASPNET права администратора,
S>>>прописывал ASPNET в безопасность файла сервиса,
S>>>но все тоже самое повторяется...
G>>перегрузи машину, у тебя скорее всего действуют старые права, новые еще не вступили в силу

M>да ладно... глупости говоришь....

Не совсем правильно выразился . Если приложение уже запущено под пользователем, то добавление этого пользователя в новую группу никак на этом приложении не отразиться. Для вступления новых прав надо перезапустить приложение. Так что надо IIS перезапустить, с машиной это я действительно погорячился
... << RSDN@Home 1.1 beta 1 >>
Re: Ошибка вызова NT сервиса из .aspx
От: shmelev Россия  
Дата: 22.08.03 08:58
Оценка:
Спасибо огромное всем за помощь!

Разобрался с этим проблемом, поэтому считаю своим долгом поделиться своими изысками.

Последовательность операций по предоставлению доступа к NT-сервисам из веб-приложений можно описать следующим образом:

Создаем необходимый NT сервис, для него инсталяцию, устанавливаем его в системе
Создаем Web Application для работы с сервисом
Создаем нового пользователя, в контексте этого пользователя будет запускаться приложение
Включаем его в группу Debugger Users (для предоставления доступа к системным приложениям)
Предоставляем для этого пользователя доступ к временной папке приложения, например:
"С:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\[Имя временной папки приложения]"
В файле Web.config:
— прописать Windows аутентификация: <authentication mode="Windows"/>, если не прописана
— прописываем имперсонацию зарегестрированного выше пользователя:
<identity impersonate="true" username= "***" password= "***" />. Таким образом запуск приложения будет происходить в контексте данного пользователя.

С уважением shmelev.
Re[2]: Ошибка вызова NT сервиса из .aspx
От: Gollum Россия  
Дата: 22.08.03 09:37
Оценка:
Здравствуйте, shmelev, Вы писали:

S><identity impersonate="true" username= "***" password= "***" />. Таким образом запуск приложения будет происходить в контексте данного пользователя.


И все же лучше избегать хранения Credentials пользователя в clear-text, пусть даже и в config файле. Лучше сделать так, как здесь.
I cant really tell and i dont really care
Eugene Agafonov on the .NET

Re[2]: Ошибка вызова NT сервиса из .aspx
От: Forrest  
Дата: 11.11.03 18:36
Оценка:
S> — прописываем имперсонацию зарегестрированного выше пользователя:
S> <identity impersonate="true" username= "***" password= "***" />. Таким образом запуск приложения будет происходить в контексте данного пользователя.

Послушай, мил человек, у меня IIS на такую имперсонацию ругается дословно "Could not create Windows user token from the credentials specified in the config file. Error from the operating system 'Клиент не обладает требуемыми правами. '
"

А это вот строчки из WebConfig-а

Line 37: <authentication mode="Windows" />
Line 38: <identity impersonate="true" userName="1234" password="1234"/>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.