Доступ к виртуальному каталогу (подключенный диск) через веб-страницу С#/asp.net с помощью IIS7

Итак, у меня есть сервер A и сервер B.

Сервер A: Windows Server 2008R2 Сервер B: Windows Server 2003

Веб-страница использует фреймворк 4.0, созданный с помощью VS2013 Pro RC

на сервере. Моя веб-страница asp.net/c# работает на IIS7 на сервере B у меня есть общая папка.

Теперь я сопоставил эту общую папку с сервера B на сервере A и полностью ее можно получить через Desktop\Windows Explorer, однако доступ к папке с веб-страницы - это совсем другая история.

Для доступа к папке, что я сделал в IIS7, создайте виртуальную папку под одной и той же веб-страницей и укажите ее на сопоставленный диск.

Это, конечно же, сработало бы, если бы папка была на том же сервере A, но поскольку она на другом сервере B, я получаю следующую ошибку.

Не удалось найти часть пути 'L:\a\b\file.pdf' теперь путь на 100% правильный, так как я проверил.


Вот еще дополнительная информация об отладке:

Не удалось найти часть пути "L:\a\b\file.pdf".

Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.IO.DirectoryNotFoundException: не удалось найдите часть пути "L:\a\b\file.pdf".

Ошибка источника:

Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.

Трассировка стека:

[DirectoryNotFoundException: не удалось найти часть пути 'L:\a\b\file.pdf'.] System.IO.__ Error.WinIOError(Int32 errorCode, String maybeFullPath) +216 System.IO.FileStream.Init(String path, Режим FileMode, доступ к FileAccess, права Int32, логические значения UseRights, FileShare share, Int32 bufferSize, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) +2481 System.IO.FileStream..ctor(String path, FileMode, доступ FileAccess, общий ресурс FileShare, Int32 bufferSize, Параметры FileOptions, String msgPath, Boolean bFromProxy) +229
System.IO.FileStream..ctor(String path, режим FileMode, FileAccess доступ, общий ресурс FileShare) +102
System.Web.HttpResponse.WriteFile(String filename, Boolean readIntoMemory) +166 Reloc.Client.Contracts.openLinkClick(объект отправителя, EventArgs e) в c:\Users\x\Documents\Visual Studio 2013\Projects\П р \\ S\Listdoc.aspx.cs: 230
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean вызываетValidation, String validationGroup) +1192
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(источник объекта, EventArgs e) +164 System.Web.UI.Control.RaiseBubbleEvent(объект источник, аргументы EventArgs) +52
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3707


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

Ответ 1

Как предполагает wata, каждый пользователь получает свои собственные подключенные диски. Это означает, что ваш диск L: не совпадает с учетной записью пула приложений L: диск.

Кроме того, если вы не изменили учетную запись, на которой запущен ваш пул приложений, он не сможет получить доступ к общей папке на другом сервере. Скорее всего, вы входите на оба сервера, используя учетную запись домена Active Directory. Если это так, вы, вероятно, захотите создать новую учетную запись домена Active Directory для использования в качестве идентификатора для своего пула приложений. Вы можете изменить идентификатор пула приложений, чтобы использовать свою собственную учетную запись домена для целей dev/testing, но это не рекомендуемая практика безопасности в производственной системе.

Как только вы создали новую учетную запись службы Active Directory (чтобы избежать будущих проблем, убедитесь, что пароль не истекает), вы захотите изменить идентификатор пула приложений в IIS. Перейдите в "Пулы приложений", найдите пул приложений, который будет использоваться вашим сайтом, выберите его и выберите "Дополнительные настройки" справа, перейдите в "Идентификация" и нажмите кнопку "...", чтобы настроить пользовательскую учетную запись, убедившись, что префикс имени пользователя имя домена: mydomain\myserviceusername.

Вы также захотите предоставить доступ к учетной записи службы к доходу сервера B.

Теперь вам нужно будет создать постоянный сопоставленный диск с сервера A на сервер B, используя свою учетную запись службы. Подробнее см. , установив script, который переназначает диск после перезагрузки с помощью команды, такой как net use L: \\ServerB\sharedfolder /persistent:yes, убедившись, что это выполняется как ваш аккаунт службы. Вы могли бы даже запустить эту первую вещь в своем приложении Global.asax.cs Application_Start. Если вы хотите избежать трудностей шагов в этом абзаце, используйте wata-предложение использовать полный путь UNC вместо использования сопоставленного диска.

Теперь ваше веб-приложение должно иметь доступ к общей папке на сервере B.:-)

Ответ 2

Проблема заключается в том, что если вы создаете сопоставленный диск, он отображается только пользователю, который его создал. Поскольку приложение IIS Application Pool, вероятно, работает под другим пользователем, этот подключенный к нему диск невидим. (Запуск приложения под другой учетной записью пользователя является хорошей практикой безопасности)

Я предлагаю следующее: вместо использования Mapped Drive для виртуального каталога попробуйте использовать UNC-путь. Например: создайте виртуальный каталог под названием "документы", который сопоставляется с \\ServerB\a\b. Затем вы сможете получить доступ к вашему файлу с помощью "documents/file.pdf". Имейте в виду, что пользователю приложения Application IIS приложения необходимо иметь доступ к общему ресурсу сети \\ServerB \, а также к вложенным папкам и файлам, которые вам нужны.

Ответ 3

Проверьте права доступа к папке на сервере и убедитесь, что пул приложений на этом сайте имеет доступ к ней.