Когда Application_EndRequest может не вызываться? - PullRequest
4 голосов
/ 01 сентября 2010

У нас есть веб-сервис ASMX, размещенный в IIS 6, и мы наблюдаем странное поведение с одним из наших WebMethod s. После iisreset первый вызов определенного метода не может вернуться к клиенту, который истекает через 60 секунд.

Я ввел вход в Application_BeginRequest и Application_EndRequest в файле Global.asax.cs. Ведение журнала показывает, что для этого одного вызова EndRequest не вызывается. Блок try-finally в самом методе показывает, что он выполняется до конца.

Есть другие запросы к различным методам до, во время и после этого, которые не показывают проблем. TcpTrace показывает, что на этот первый запрос к методу не возвращается никакого ответа.

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

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

Ответы [ 2 ]

1 голос
/ 18 января 2011

Предполагая, что это полностью повторяется, я бы начал с изменения метода. А именно, я бы убрал вещи, пока они не будут работать как положено.

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

Также я бы уделил пристальное внимание тому, что делает метод. Например, это создание неуправляемых ресурсов? Есть ли у вас какие-либо обработчики http или модули, которые могут быть кратеров при первом выполнении для этого метода?

Удаляя код до тех пор, пока он не заработает, вы точно поймете, что его вызывает.

0 голосов
/ 18 января 2011

некоторые рекомендации: поместите ваши записи под: Application_AuthenticateRequest Ошибка приложения и посмотреть, если вы получаете какую-либо ошибку.

Если это не поможет, проверьте журналы событий вашего домена приложения и IIS

...