2009-06-23 4 views
0

Я очень редко увидеть следующее сообщение об ошибке регистрируется на сайте я управляю:перемежающейся ADO Recordset ошибка объекта в классическом ASP скрипт

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

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

ia_archiver (+ http://www.alexa.com/site/help/webmasters; [email protected])

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

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

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

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

С уважением

Junto

ответ

2

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

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

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

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

+0

О, и в конечном счете, его единственная ошибка 1: 500 000, поэтому не беспокойтесь об этом слишком много;) –

+0

Ты дал мне только подсказку, в которой я нуждался. Я уже проверял все параметры для неожиданных данных, и проблем не было. Тем не менее, я не проверял ситуацию, когда никакие параметры не передавались вообще. У меня есть проверка, чтобы предотвратить это сейчас. Задача решена. Благодарю. – Junto

+0

Рад помочь! :) –

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