У меня есть веб-сервер с балансировкой нагрузки, на котором я пытаюсь настроить виртуальный каталог на одном сервере (server02) на сетевой ресурс на другом сервере (server01). Оба сервера - это IIS 7 в Windows 2008R2. Они не являются частью домена.
Я настраиваю виртуальный каталог на server02, подключаюсь к сетевому ресурсу как администратор server01 (в целях тестирования).
В IIS я могу просматривать файлы в виртуальном каталоге. Когда я нажимаю «Параметры теста» в основных настройках виртуального каталога, ошибок нет, и виртуальный каталог может без проблем подключиться к общему ресурсу.
Однако когда я пытаюсь запросить файл (http: //server02/media/image.jpg) через виртуальный каталог я получаю эту ошибку конфигурации "An error occurred loading a configuration file: Failed to start monitoring changes to '\\server01\media' because access is denied.
".
Я понятия не имею, чем это вызвано, потому что согласно IIS соединение в порядке.
Учетная запись пользователя, под которой работает пул приложений вашего сайта, должна иметь разрешение на доступ к этому общему ресурсу. Измените это на учетную запись с правами на эту долю, и все будет в порядке.
Кроме того, какой смысл балансировать нагрузку на ваши веб-серверы, если вы собираетесь использовать server01 как единственную точку отказа? Вместо этого вам следует реплицировать эти данные или кластеризовать веб-серверы с общим хранилищем. То, что вы пытаетесь сделать, - не очень хорошая идея.
Если вы автоматически масштабируете свои серверы, чем вы хотите сделать это в коде, вы можете сделать следующее:
net.exe user MyNewLocalUser Password! /ADD
net.exe share MyNewShare=C:\MyPath /Grant:MyNewLocalUser,full
если вы разворачиваете свой веб-сервер на лету, вы можете использовать следующий код для создания виртуального каталога и изменения пула приложений на нового пользователя.
Using mgr As New ServerManager
Dim MainApp As Site = mgr.Sites(SiteName)
mgr.Sites(SiteName).Applications(0).VirtualDirectories.Add("/MyVirDir", "\\server\share")
Dim appPool As String = Nothing
For Each app In MainApp.Applications
appPool = app.ApplicationPoolName
Dim myAppPool As ApplicationPool = mgr.ApplicationPools(appPool)
myAppPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser
myAppPool.ProcessModel.UserName = "MyNewLocalUser"
myAppPool.ProcessModel.Password = "Password!"
mgr.CommitChanges()
Next
End Using