IIS7 — чтение файла из пула приложений

#silverlight #iis-7 #permissions #filesystems

#silverlight #iis-7 #разрешения #файловые системы

Вопрос:

РЕДАКТИРОВАТЬ: я сделал это более запутанным, чем нужно. Забудьте, что это клиент Silverlight. У меня есть служба WCF, размещенная в IIS, которая должна иметь доступ к файлу в локальной файловой системе. Потребителем этой услуги будет Silverlight, но я не думаю, что это важно, и его следовало исключить.

У меня есть приложение Silverlight, в котором я размещаю службу. В рамках этой службы я хочу прочитать текстовый файл в корне диска C. (только для тестирования). Я получаю исключение, что файл не может быть найден. Я думаю, что это проблема с разрешениями, но я не могу в этом разобраться.

Для моего идентификатора пула приложений установлено значение NetworkService. У меня установлен уровень доверия .NET на полный (внутренний). Я даже зашел так далеко, что предоставил пользователю NetworkService права на чтение текстового файла, который я пытаюсь прочитать.

Службе необходимо иметь доступ к файловой системе. Как правильно это сделать?

Спасибо,

-Скотт

Комментарии:

1. Вы читаете файл из приложения Silverlight или из службы?

2. Из службы. Все выполняется с сервера.

3. Меня беспокоит строка «Приложение Silverlight, в котором я размещаю службу». Как вы получаете доступ к сервису из клиента Silverlight?

4. Забудьте о том, что это приложение Silverlight. Думайте об этом как о простой службе WCF, которая должна считывать данные из файла на диске C. Потребителями этой услуги будут Silverlight и другие типы клиентов. Я думаю, что я сделал свой вопрос более запутанным, чем нужно, со ссылкой на Silverlight.

Ответ №1:

Прежде всего, исключите из уравнения то, чего не будет в уравнении в реальной жизни. В реальном приложении вы не будете читать из C: . Поэтому стоит подумать о том, откуда вы будете читать.

Я предлагаю, чтобы ваш файл находился в App_Data папке веб-сайта. Поэтому попробуйте поместить туда файл, а затем получить к нему доступ из службы. Вы можете разрешить физический файл App_Data с помощью:

 string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "App_PathSomeFile.txt");
  

Комментарии:

1. Причина, по которой я пытался читать с диска C, заключалась в том, что у меня есть несколько причин для этого. Например, я должен загрузить собственную dll usig LoadLibrary() и знал, что она будет найдена на локальном диске. Однако ваш пост заставил меня подумать, что я мог бы добавить эту dll в свой App_Data, как и все остальное. Я попробую и посмотрю, решит ли это мои проблемы. Спасибо…

2. @scott: вы рассматривали возможность размещения all в папке web apps bin?