Проблема с разрешением при развертывании веб-службы как виртуального каталога. Работает в VS IDE

У меня есть веб-служба ASP.NET, которая создаст текстовый файл по пути, который передается в качестве параметра методу.

 private void CreateFile(string path)
 {
        string strFileName = path;
        StreamWriter sw = new StreamWriter(strFileName, true);
        sw.WriteLine("");
        sw.Write("Created at " + DateTime.Now.ToString());
        sw.Close();
 }

Теперь я передаю папку в сети в качестве параметра и вызываю метод

  CreateFile(@"\\192.168.0.40\\labels\\test.txt");

При запуске кода из среды разработки Visual Studio файл создается по пути. Но когда я опубликовал это и развернул как виртуальный каталог, у меня возникла ошибка, например

   "System.UnauthorizedAccessException: Access to the path '\\192.168.0.40\labels\test.txt' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at System.IO.StreamWriter.CreateFile(String path, Boolean append)
   at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
   at System.IO.StreamWriter..ctor(String path, Boolean append)

У меня <identity impersonate="true"/> в моем web.config. Моя машина работает в XP, а другая - в Windows Server 2003. Я установил разрешение WRITE на «Anyone» для этой папки.


person Shyju    schedule 27.04.2010    source источник


Ответы (1)


Ваше веб-приложение работает под локальной учетной записью пользователя aspnet, которая не имеет доступа к ресурсу в сети. Если у вас есть пулы приложений в вашей версии IIS, вы должны сделать пользователя пула приложений пользователем домена, который имеет доступ к сетевому ресурсу. Если у вас нет пулов приложений, вы меняете пользователя в Интернете в processModel элемент web.config.

person Tom Cabanski    schedule 27.04.2010