2012-01-10 2 views
2

У меня возникла проблема с классическим ASP-приложением, которое я поддерживаю (архитектор давно ушел). Каждый сайт клиента получает виртуальный каталог, соответствующий их имени базы данных, например, http://www.site.com/Foo будет сайтом для пользователя Foo, и их база данных также будет называться Foo. 1: 1, очень ясно.Confused Запросы между классическим ASP + .NET Application

Предположим, что есть также http://www.site.com/Bar. Ошибка, которую я получаю очень редко, при минимальной нагрузке, заключается в том, что запросы POST/Bar сохраняются в базе данных/Foo.

Здесь стоит отметить, что действие сохранения подчинено .NET-компоненту, создаваемому при вызове Server.CreateObject. Этот экземпляр класса .NET использует

System.EnterpriseServices.ContextUtil .GetNamedProperty("Request");
, чтобы получить дескриптор текущего запроса. Код .NET строит все о действии сохранения на основе этого запроса.

Моя рабочая теория заключается в том, что каким-то образом System.EnterpriseServices.ContextUtil и страница .asp, которая создала компонент .NET, имеют разные мнения о том, что представляет собой текущий запрос. Это возможно? Кажется, у меня есть идея, что запросы обрабатывались по одному, но я, похоже, не могу найти явный ответ на этот вопрос.

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

Моя единственная идея состоит в том, что какой-то элемент пула соединений с базой данных используется неправильно, но соединения с базой данных создаются с именем базы данных как часть строки подключения , поэтому я считаю, что это крайне маловероятно.

Сервер работает под управлением IIS 6, сервером базы данных является SQL Server 2000. Планы обновления уже ведутся.

ответ

0

Возможно, это проблема пула подключения к базе данных.

Мы эль, чтобы определить, что это ошибка, ряд данных, идущих в неверную базу данных, будет иметь место только в одном случае:

  • сайт Foo зацикливается, выполняя много вставок в классическом осины
  • Панель сайта сохраняет одну запись в .NET.

Когда эти запросы происходят в миллисекундах друг от друга, мы увидели ошибку.

Мы реорганизовали код, чтобы уменьшить количество вставок, выполняемых за цикл, что резко сократило количество случаев этой ошибки, хотя мы все еще видим это редко.

0

Я бы подумал, что ответ будет иметь место где-то внутри самого объекта Request. Или, возможно, Case/If в коде .NET, который в основном не соответствует Foo? Например, есть ли какой-либо код, который является общим для всех приложений, которые могут запускаться из корня веб-сервера ... или, по крайней мере, думает, что он работает оттуда?

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

+0

Благодарим за отзыв - я должен был упомянуть, что описание проблемы было очень упрощенной версией и что на самом деле было несколько сайтов, столкнувшихся с проблемой. – overslacked

Смежные вопросы