написать файл с веб-сервисов - PullRequest
3 голосов
/ 24 октября 2008

У меня есть веб-сервис, использующий .net c #, и я хочу записать текстовый файл на сервере, но не могу заставить это работать Я считаю, что это проблема с разрешением.

В частности, я думаю, что проблема в том, что я использую System.IO.Directory.GetCurrentDirectory().

Есть ли лучшая альтернатива?

Ответы [ 5 ]

9 голосов
/ 24 октября 2008

Попробуйте предоставить пользователю ASP.NET (или любой учетной записи, с которой работает IIS) разрешение на запись в папку, в которую вы пытаетесь писать.

Если это общий сетевой ресурс, попробуйте запустить IIS как пользователь домена, который может выполнять запись в общий ресурс.

Запомните принцип предоставления минимального разрешения (не используйте доступ на уровне администратора).

3 голосов
/ 28 сентября 2011

Если вы не укажете папку назначения, я предполагаю, что ваш веб-сервис хочет написать в "C: \ Windows \ System32 \" или что-то в этом роде. Вот почему UnauthorizedAccessException будет выброшен на сервер. Чтобы написать в домашний каталог веб-службы, вы должны выяснить, где это в первую очередь.

Следующее работает для меня, но вы также найдете другие предложения здесь .

Добавьте ссылку System.Web и получите текущий каталог, вызвав:

strFileDestination = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + strFileName;

Не забудьте дать службе разрешение на запись в IIS.

2 голосов
/ 10 ноября 2008

Стюарт, вместо использования System.IO.Directory.GetCurrentDirectory () вы можете использовать Server.MapPath. Вы можете указать Server.MapPath каталог относительно местоположения вашего веб-сервиса, в котором вы хотите сохранить файл, в противном случае вам, вероятно, потребуется указать полный путь к файлу "C: \ Files \ file.txt". Что касается проблемы с разрешениями, я обычно могу решить эту проблему, добавив права на запись в папку, в которую записываю файл, для пользователей IIS_WPG и ASPNET (эти имена пользователей могут отличаться на вашем сервере).

2 голосов
/ 24 октября 2008

Если вы работаете в Windows 2003 и не включили олицетворение ASP.NET и запускаете приложение в DefaultAppPool или пуле приложений, настроенном для работы под идентификатором " Сетевая служба », тогда вам нужно дать учетной записи« Сетевая служба »разрешение на запись в папку назначения. Если вы используете сайт в пуле приложений, который использует удостоверение, отличное от «Сетевая служба», то для этой учетной записи могут потребоваться разрешения на запись в целевую папку.

Если вы используете Windows 2000, то учетной записи '<MACHINENAME>\ASPNET' потребуются разрешения на запись в папку назначения.

Если у вас включена олицетворение, вам нужно вместо этого дать разрешение на запись учетной записи анонимного пользователя в папку назначения.

Чтобы проверить, включена ли олицетворение, откройте (при условии ASP.NET 2.0), затем проверьте файл machine.config (C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG), чтобы проверить, есть ли у вас следующая настройка:

<identity impersonate="true"/>

Это также может быть переопределено в файле web.config вашего приложения.

Кроме того, если вы работаете в среде с частичным доверием, то, скорее всего, вы сможете писать только в папку приложения веб-сайта, потому что FileIOPermission по умолчанию обычно устанавливается в $ AppDir $, то есть вы не можете изменять файлы где-либо еще даже с правильными разрешениями NTFS.

Если вы пишете в общий сетевой ресурс, то StingyJack ответит вам, но условия среды частичного доверия все еще применимы.

Но сначала проверьте свои NTFS-разрешения, это, вероятно, лучшая ставка.

Надеюсь, это поможет Кев

0 голосов
/ 24 октября 2008

Вы должны иметь возможность писать файлы из веб-сервисов. Скорее всего, это проблема с разрешениями или доверием. Если вы пользуетесь ограниченным доверием (т. Е. Со средним уровнем доверия), убедитесь, что вы пишете в патч внутри или ниже своего веб-корня. Если вы уже делаете это или находитесь в среде полного доверия, убедитесь, что у каталога есть разрешения для рабочего процесса IIS для записи в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...