Запутанные запросы между приложением Classic ASP + .NET - PullRequest
2 голосов
/ 10 января 2012

У меня проблема с приложением 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. Планы обновления уже выполняются.

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Это, похоже, проблема с пулом соединений с базой данных.

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

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

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

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

0 голосов
/ 10 января 2012

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

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

...