Веб-обработчик ASP.Net UNC и путь к файлу

У меня есть веб-обработчик, который я использую для чтения файла и его потоковой передачи клиенту. Это отлично работает, если я использую путь к файлу на локальном диске: D:\Path\To\My\File.flv

Однако, если я использую имя общего ресурса: \ServerName\ShareName\File.flv

Я получаю сообщение «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль».

Акция открыта для всех, полный контроль.

У меня включено олицетворение, и в моем обработчике есть следующее:

context.Response.Write("Context User: " + ((WindowsIdentity)context.User.Identity).Name + "<br />");
context.Response.Write("Windows Identity: " + WindowsIdentity.GetCurrent().Name + "<br />");

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

Пользователь контекста: Идентификация Windows: SpecificAccount

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

Контекстный пользователь: MyAccount Идентификация Windows: MyAccount

Это не меняет сообщение об ошибке для общего и не общего доступа.

Я нашел эту веб-страницу, посвященную веб-обработчикам и олицетворению: http://weblogs.asp.net/drnetjes/archive/2005/06/06/410508.aspx

но я не совсем уверен, как это реализовать или решит ли это проблему.

Любые идеи?


person Rob    schedule 27.06.2011    source источник
comment
Имеет ли NETWORK SERVICE id доступ к файлу и его иерархии DIR?   -  person Rahul    schedule 27.06.2011
comment
это делает сейчас, не помогло .. ):   -  person Rob    schedule 27.06.2011
comment
Вы давали разрешение рекурсивно (я имею в виду DIR-›subdir-›leaf (file))? В настоящее время анонимный доступ запрещен?   -  person Rahul    schedule 27.06.2011
comment
Да... Я только что перепроверил, чтобы убедиться. и, как я уже сказал, у меня есть все с полным контролем. И он отлично работает, если я получаю доступ к тому же файлу через структуру каталогов ... это просто сбой UNC.   -  person Rob    schedule 27.06.2011
comment
Под каким идентификатором работает пул приложений? Убедитесь, что у удостоверения пула приложений есть доступ к общему ресурсу.   -  person Charlino    schedule 21.07.2011


Ответы (2)


В вашем посте выше все просто, но вы поставили \ServerName\ShareName\File.flv

разве не должно быть \\ServerName\ShareName\File.flv

в худшем случае вы можете использовать file://ServerName/ShareName/File.flv, но обратите внимание, что для локальных файлов вы должны использовать сокращение file:///C:/path/File.flv. (см. википедию)

person Eric Falsken    schedule 26.07.2011
comment
вы были правы .. у меня было \ случайно .. на самом деле это было \\ в моем коде. Я попробовал файл:// и файл:///, но это не работает с System.IO.StreamReader (что и является фактической причиной всего этого) - person Rob; 27.07.2011

Гаа... Ненавижу отвечать на свои вопросы, но вот в чем была проблема:

Права доступа к общему ресурсу и файлам установлены правильно. Это старая машина с Windows 2003, и когда я использую новый пул приложений (что я и сделал с этим конкретным приложением), у меня всегда возникают проблемы с разрешениями.

Решения были (facepalm) перезагрузить сервер.

Мне жаль всех мозговых клеток, которые 60 странных людей потратили на это.

Еще раз спасибо за вашу помощь.

Глупый IIS... Глупый Windows 2003... когда-нибудь придется перестроить сервер

person Rob    schedule 26.07.2011
comment
Перезапуска этого пула приложений должно быть достаточно вместо перезагрузки. - person oleschri; 27.07.2011
comment
Вы могли бы так подумать, но это не так.. Это связано с чем-то странным, что я не смог определить с помощью IIS. Дополнительным преимуществом является то, что если я попытаюсь переместить существующее приложение из одной версии .Net в другую, IIS станет сварливым и закроется. Тогда он не вернется, если я не перезагружу. Даже если я убью процессы. Сервер нужно пересобрать. У меня есть коробка 2k8, на которую мне, возможно, придется перейти раньше, чем позже. - person Rob; 27.07.2011
comment
нет необходимости перезагружать сервер (или не должно быть), просто нажмите «Пуск» -> «Выполнить», затем введите iisreset, затем нажмите клавишу ввода так сильно, как хотите, чтобы перезапустить IIS. Спас меня от миллиона головных болей. - person Moog; 28.07.2011
comment
@Rob @Merlin изменение версии существующего приложения ASP.NET в IIS Manager запускает aspnet_regiis -s... и, следовательно, всегда приводит к ошибке iisreset. Здесь я использую настроенную версию сценария, чтобы изменить версию ASP.Net одного приложения, не затрагивая другие: blogs.msdn.com/b/jorman/archive/2006/04/14/576605.aspx - person oleschri; 01.08.2011