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

Так что у меня есть сервер А и сервер Б.

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

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

на сервере A моя веб-страница 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 путь, режим FileMode, доступ к FileAccess, права Int32, логические useRights, общий ресурс FileShare, параметры типа3232323232, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, строка msgPath, логическое значение bFromProxy, логическое значение useLongPath) +2481 System.IO.FileStream..ctor(путь строки) режим, доступ к FileAccess, общий доступ к FileShare, размер буфера Int32, параметры FileOptions, строка msgPath, логическое значение bFromProxy) +229
System.IO.FileStream..ctor (Строковый путь, режим FileMode, доступ к FileAccess, общий доступ к FileShare) +102
System.Web.HttpResponse.WriteFile (имя строки, логическое readIntoMemory) +166 Reloc.Client.Contracts.openLinkClick(отправитель объекта, EventArgs e) в c: \ Users \ x \ Documents \ Visual Studio 2013 \ Projects \ p \ p \ S \ Listdoc.aspx.cs: 230
System.Web.UI.WebControls.GridView.HandleEvent (EventArgs e, логические причины Validation, String validationGroup) +1192
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent (Источник объекта, EventArgs e) +164 System.Web.UI.Control.RaiseBubbleEvent(Источник объекта, EventArgs args) +52
System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) +3707


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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам