Процесс маршрутизации URL работает в одной сети, а не в другой.100% загрузка процессора - PullRequest
1 голос
/ 27 июля 2010

Я думал, что у меня под контролем маршрутизация URL, так как он хорошо работает на одном веб-сайте, но обнаружил, что он не работает нормально на другом.Оба веб-сайта работают с одного и того же сервера, того же IIS 6.0, одного и того же asp_isapi.dll.

SETUP 1: Этот работает хорошо:

            routes.MapPageRoute("Article SEO",
                        "sid/{sid}",
                        "~/ar.aspx",
                        true,
                        new RouteValueDictionary { },
                        new RouteValueDictionary { { "sid", @"^([a-zA-Z\-]*)+([a-zA-Z])+(.html)$" } }

                    );

SETUP 2: Но этот, очень похожий, работает не очень хорошо:

        routes.MapPageRoute("Article",
                        "page/{sid}",
                        "~/page.aspx",
                        true,
                        new RouteValueDictionary { },
                        new RouteValueDictionary { { "sid", @"^([a-zA-Z0-9\-]*)+([a-zA-Z0-9])+(.html)$" } }
                    );

Тестирование Regex в Regex Coach показывает, что они написаны правильно, я имею в виду, что они оба ловят хорошие или неправильные строки.

URL-адрес, который я использую для второго: http://address/page/some-html-keywords.html. Если я укажу такой URL-адрес, он будет работать хорошо.

Проблема в том, что если я изменю расширение .html на что-то вроде .htmls или .anything , это полностью убьет веб-сервер.У меня есть 100% процесс использования.Я не понимаю, почему и как, у меня нет этой проблемы с первой настройкой.Я могу изменить его на все, что захочу, и он либо показывает страницу, потому что у меня правильный формат, либо показывает, что страница 404 не найдена.

Некоторые примеры:

http://address/page - страница 404, работает правильно

http://address/page/test.html - принято, работает правильно

http://address/page/testing_#.html - страница 404, работает правильно

http://address/page/test.htmls - не показывает страницу, зависает, 100% использование процесса, не работает правильно

http://address/page/test.whatever - не показывать страницу, зависание, 100% использование процесса, не работает правильно

http://address/page/page.aspx - перенаправления, работают правильно

Та же самая настройка (с другой проверкой Regex) хорошо работает на другом сайте в том же IIS 6.0.Оба используют один и тот же файл asp_isapi.dll.

Я просто не понимаю.Я попытался прокомментировать весь код в page.aspx, чтобы узнать, была ли проблема с кодом в page.aspx, но это не имеет значения.Он просто висит с пустой страницей.Поэтому должна быть проблема с маршрутизацией URL или isapi.dll или IIS.Но другой веб-сайт на том же IIS и той же машине просто работает.

Есть мнения?

Спасибо

Fero

Ответы [ 2 ]

0 голосов
/ 07 марта 2011

Узнайте, как проанализировать основную причину высокой загрузки ЦП ASP.NET, и затем вы поймете, почему,

http://blogs.msdn.com/b/tess/archive/2008/02/22/net-debugging-demos-lab-4-high-cpu-hang.aspx

0 голосов
/ 07 марта 2011

Я ничего не знаю о маршрутизации URL

НО я замечаю, что заданное вами регулярное выражение

@"^([a-zA-Z0-9\-]*)+([a-zA-Z0-9])+(.html)$"

выглядит одинаково в обоих примерах кода И (опять же, воба примера) заканчиваются завершающим $ (что означает конец строки), который запрещает совпадению всего НЕ заканчивающегося в .html этого регулярного выражения.Чтобы получить .htmls, вам нужен (.html. *) $, Чтобы получить .все, что вам нужно что-то вроде

@"^([a-zA-Z0-9\-]*)+([a-zA-Z0-9])+\.[a-zA-Z0-9]*$"

Кроме того, вероятно, было бы неплохо отказаться от '.'перед html, как \ .html, поскольку выражения reg обычно обрабатывают '.'означать любой отдельный символ, который включает в себя «.»символ.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...