Периодическая ошибка объекта ADO Recordset в классическом ASP-сценарии - PullRequest
0 голосов
/ 23 июня 2009

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

Аргументы имеют неправильный тип, находятся вне допустимого диапазона или находятся вконфликтовать друг с другом

Когда я сам получаю доступ к классической странице ASP, я не могу продублировать проблему.Примечательно, что пользовательский агент почти всегда:

ia_archiver (+ http://www.alexa.com/site/help/webmasters; crawler@alexa.com)

Сценарий представляет собой страницу поиска продукта,который использует довольно стандартный ASP пейджинг.Соответствующий код выглядит следующим образом:

...
Set rs=Server.CreateObject("ADODB.Recordset")     
rs.CacheSize = iPageSize
rs.PageSize = iPageSize
rs.Open mySQL, Conntemp, adOpenStatic, adLockReadOnly, adCmdText
...

Я вполне уверен, что курсор и тип блокировки верны.Очевидно, что если они ошиблись, я бы ожидал, что скрипт вообще не будет работать.Единственное, о чем я могу думать, это то, что это связано с тем, что объект набора записей все еще открыт (и соединение подключено), а паук Alexa снова попадает на сайт, вызывая конфликт.

Кто-нибудьесть идеи как решить это?Ошибка происходит редко (1 раз в месяц при 500 000 просмотров страниц), но все же я хотел бы убедиться, что ошибок нет, если это возможно.Единственное, что я могу обойти, это использовать robots.txt для исключения роботов из этой страницы.

С уважением

Junto

1 Ответ

2 голосов
/ 23 июня 2009

Проводите ли вы некоторые проверки входных данных из браузера перед тем, как начинать бросать их в функцию, возможно, вы предполагаете, что переменная будет работать хорошо, а может и нет?

Например. Как выглядит ваша строка запроса?

Если это так? Page = 4, и вы читаете это как страницу, которую вы хотите, предполагая, что все хорошо, так как она, должно быть, была сгенерирована из вашего кода. Что произойдет, если я только что набрал это, а страницы 4 нет? Я думаю, что это, скорее всего, ваша проблема.

Может быть, Alexa предполагает, что у вас может быть загрузка страниц, которые он может проиндексировать только из строки запроса. то есть может показаться, что у вас всегда есть что-то вроде? page = X, поэтому просматривайте их все, чтобы убедиться, что он получает их все и останавливается, когда он получает ошибку / 404? Просто плюнь на это, хотя.

...