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()
Здравствуйте, 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" />
Здравствуйте, shmelev, Вы писали:
S>Здравствуйте, Gollum, Вы писали:
G>>Видимо, раздать пользователю ASPNET права на запуск сервиса.
S>Спасибо за ответ. S>Давал пользователю ASPNET права администратора, S>прописывал ASPNET в безопасность файла сервиса, S>но все тоже самое повторяется...
перегрузи машину, у тебя скорее всего действуют старые права, новые еще не вступили в силу
Здравствуйте, gerik, Вы писали:
G>Здравствуйте, shmelev, Вы писали:
S>>Здравствуйте, Gollum, Вы писали:
G>>>Видимо, раздать пользователю ASPNET права на запуск сервиса.
S>>Спасибо за ответ. S>>Давал пользователю ASPNET права администратора, S>>прописывал ASPNET в безопасность файла сервиса, S>>но все тоже самое повторяется... G>перегрузи машину, у тебя скорее всего действуют старые права, новые еще не вступили в силу
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, gerik, Вы писали:
G>>Здравствуйте, shmelev, Вы писали:
S>>>Здравствуйте, Gollum, Вы писали:
G>>>>Видимо, раздать пользователю ASPNET права на запуск сервиса.
S>>>Спасибо за ответ. S>>>Давал пользователю ASPNET права администратора, S>>>прописывал ASPNET в безопасность файла сервиса, S>>>но все тоже самое повторяется... G>>перегрузи машину, у тебя скорее всего действуют старые права, новые еще не вступили в силу
M>да ладно... глупости говоришь....
Не совсем правильно выразился . Если приложение уже запущено под пользователем, то добавление этого пользователя в новую группу никак на этом приложении не отразиться. Для вступления новых прав надо перезапустить приложение. Так что надо IIS перезапустить, с машиной это я действительно погорячился
Разобрался с этим проблемом, поэтому считаю своим долгом поделиться своими изысками.
Последовательность операций по предоставлению доступа к 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, Вы писали:
S><identity impersonate="true" username= "***" password= "***" />. Таким образом запуск приложения будет происходить в контексте данного пользователя.
И все же лучше избегать хранения Credentials пользователя в clear-text, пусть даже и в config файле. Лучше сделать так, как здесь.
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"/>