У меня проблема с приложением Classic ASP, которое я поддерживаю (архитектор давно ушел). Каждый сайт клиента получает виртуальный каталог, который соответствует имени его базы данных - например, http://www.site.com/Foo будет сайтом для клиента Foo, а их база данных также будет называться Foo. Отображение 1: 1, очень четкое.
Допустим, что есть также http://www.site.com/Bar. Ошибка, которую я получаю очень редко при минимальной загрузке, заключается в том, что POST-запросы к / Bar сохраняются в базе данных / Foo.
Стоит отметить, что действие сохранения выполняется для компонента .NET, созданного с помощью вызова Server.CreateObject. Этот экземпляр класса .NET использует
<a href="http://msdn.microsoft.com/en-us/library/system.enterpriseservices.contextutil%28v=VS.80%29.aspx" rel="nofollow">System.EnterpriseServices.ContextUtil</a>.GetNamedProperty("Request");
, чтобы получить дескриптор текущего запроса. Код .NET создает все о действии сохранения на основе этого запроса.
Моя рабочая теория такова, что System.EnterpriseServices.ContextUtil и страница .asp, которая создала компонент .NET, имеют разные мнения о текущем запросе. Это возможно? Кажется, у меня есть идея, что запросы обрабатываются по одному, но я не могу найти однозначного ответа на этот вопрос.
Я попытался поместить все виртуальные каталоги в один пул приложений, и у каждого клиента есть свой собственный - проблема возникает в любом случае.
Моя единственная другая идея заключается в том, что каким-то образом элемент пула соединений с базой данных используется повторно неправильно, но соединения с базой данных создаются с именем базы данных как часть
Строка подключения, поэтому я считаю, что это крайне маловероятно.
Сервер работает под управлением IIS 6, сервер базы данных - SQL Server 2000. Планы обновления уже выполняются.