Вопрос:
Я сталкиваюсь со следующей ситуацией:
Веб-приложение ASP.NET .NET 4.0, развернутое на машине «vmsomething».
Веб-приложение, работающее на IIS 7.5, находится в d: \ webs \ myapplication на vmsomething.
Файлы конфигурации приложения:
connections.config
<?xml version="1.0"?>
<connectionStrings>
<remove name="server"/>
<add name="server" connectionString="Data Source=OUR_DB_Server;Initial Catalog=MY_INITIAL_CATALOG;Persist Security Info=False;User Id=OUR_DB_User;Password=OUR_TOP_SECRET_PASSWORD;MultipleActiveResultSets=False;Packet Size=4096;Application Name="MyApplication"" providerName="System.Data.SqlClient"/>
</connectionStrings>
web.config:
<?xml version="1.0"?>
<configuration>
<connectionStrings configSource="connections.config"/>
<system.web>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"/>
<compilation strict="true" explicit="true">
<assemblies>
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.JScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>
<authentication mode="Windows"/>
<pages>
<namespaces>
<clear/>
<add namespace="System"/>
</namespaces>
</pages>
<customErrors mode="Off">
<error statusCode="404" redirect="~/w8/index.html"/>
</customErrors>
<globalization uiCulture="de" culture="de-CH" requestEncoding="UTF-8" responseEncoding="UTF-8"/>
<httpRuntime maxRequestLength="2048000" executionTimeout="86400"/>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
Тогда получить доступ к приложению можно двумя способами:
Метод первый: http://vmsomething.com
Метод второй: http://vmsomething.com/my_application_virtdir
(без .com нельзя добавлять локальные ссылки)
Теперь я могу открыть приложение на http://vmsomething.com просто хорошо.
Если я попытаюсь открыть приложение на http://vmsomething.com/my_application_virtdir , я получаю эту ошибку:
Я не являюсь администратором сервера и не знаю, как он его настраивал.
Теперь к моему вопросу:
Причина в том, что у вас есть два веб-сайта, нацеленных на одну и ту же физическую папку. И существует наследование в web.config.
http://vmsomething
родитель и http://vmsomething/my_application_virtdir
это его ребенок. Дочерний web.config наследует все элементы от своего родителя. А web.config обычно не предназначен для работы в таком сценарии. У вас может возникнуть много головной боли, когда другие утилиты, установленные из nuget, попытаются изменить ваш web.config.
Если вы хотите получить доступ к своему сайту по адресу http://vmsomething/my_application_virtdir
тогда я думаю, что самым простым решением будет изменить физический путь для http://vmsomething
к чему-то другому.
Если вы хотите протестировать, как работает ваш веб-сайт, не указывая virtdir, вы можете настроить отдельный веб-сайт в IIS (не веб-сайт по умолчанию) и настроить его на тот же физический путь. Тогда вы сможете протестировать оба способа развертывания одновременно.