Asp.net FileUploader не работает при использовании пути к файлу UNC

Позвольте мне начать с того, что я не эксперт в разрешениях файлов Windows, поэтому, возможно, мне здесь не хватает чего-то очень простого.

У меня есть элемент управления Asp.net FileUploader. У меня есть папка на том же компьютере, что и приложение Asp.net, в которое я хочу загружать файлы.

Я хочу указать FileUploader, чтобы он помещал файлы в

\\thisMachineName\UploadFolder\

но я всегда получаю исключение о том, что доступ к этому пути запрещен.

Если я изменю каталог на

c:\UploadFolder\

работает нормально. Кроме того, я могу поместить вышеуказанный UNC в проводник Windows, и он действительно сопоставляется с каталогом.

Есть идеи или мысли?

- Обновление Примечание. Это сервер Windows 2000, и для папки «Все» предоставлены все возможные разрешения.

Ответов (3)

Решение

Я всегда вижу, что люди делают то, что им не удается установить разрешения для общего ресурса. Чтобы настроить общую папку, вам необходимо сделать следующее:

1) Определите учетную запись, под которой вы будете подключаться к общему ресурсу
2) Предоставьте этой учетной записи права доступа в файловой системе
3) Предоставьте этой учетной записи права доступа к общему сетевому файловому ресурсу

№ 1 в этом случае обычно означает проверку вашей конфигурации или просто использование проводника процессов, чтобы определить, под какой учетной записью работает ASP.NET. В Google много информации о том, как это сделать.

№ 2 очевиден. Вы входите в систему, на которой существует физический диск, переходите к папке в проводнике, щелкаете ее правой кнопкой мыши и переходите на вкладку безопасности. Мы делали это миллиард раз.

№ 3 - это место, где люди ошибаются. Да, рабочая учетная запись теперь имеет права на локальную файловую систему, но не на ПОДКЛЮЧЕНИЕ к локальной файловой системе по сети. На вкладке «Безопасность» вернитесь на вкладку «Общий доступ к сети» и найдите кнопку «Разрешения». Вы будете использовать это, чтобы предоставить рабочей учетной записи права на подключение к общему ресурсу.

Вторая проблема, с которой я столкнулся, - это когда люди пытаются предоставить права доступа на машине A учетной записи, которая существует только на машине B. Обычно это не работает. И машина A, и машина B должны принадлежать к общему домену, которому как A, так и B доверяют для аутентификации пользователей. Чаще всего предприятия, работающие под управлением Windows, используют ActiveDomain для управления правами доступа в сети.

Чтобы рабочий процесс ASP.NET на машине B имел доступ к общему ресурсу на машине A, рабочий процесс должен выполняться под учетной записью, которая аутентифицирована в сети, а не только на локальном компьютере. Чаще всего вам придется создать конкретную учетную запись в сети и предоставить права этой учетной записи для обеих машин, а затем использовать эту учетную запись для запуска рабочего процесса ASP.NET для вашего веб-сайта.

Если вы чешете затылок, значит, вам нужно чему-то научиться. Это непросто. Я настоятельно рекомендую прочитать следующее:

http://msdn.microsoft.com/en-us/library/ms978378.aspx

Он относительно ясен и содержит все, что вам нужно знать.

ВЫ можете помещать файлы в этот каталог, но как насчет пользователя, от имени которого запущен процесс ASP.NET? в Windows Server 2003 (и, предположительно, 2008, но я не уверен) ASP.NET работает под учетной записью NETWORK SERVICE, которая почти не имеет никаких прав, особенно в сети. Вам нужно будет использовать олицетворение в приложении ASP.NET или настроить общий ресурс с доступом для всех. Для этого типа сценария я обычно просто настраиваю общий ресурс с доступом для всех, и брандмауэр защищает его, чтобы доступ был только у веб-серверов.

В дополнение к ответу Уилла.

Мне пришлось предоставить разрешение NETWORK учетной записи :, а не NETWORK SERVICE учетной записи.

На вкладке безопасности общей папки добавьте NETWORK нового пользователя и предоставьте необходимые разрешения.