Server.TransferRequest возвращает пустую страницу на конкретном сервере - PullRequest
1 голос
/ 17 июня 2010

Я столкнулся с проблемой, которая, кажется, связана с конфигурацией.

У меня есть веб-приложение, основанное на MonoRail, где мы используем функцию маршрутизации из MonoRail.При первом запросе после запуска приложения маршрутизация не инициализируется.Чтобы обойти это, у меня есть следующий код в Application_OnError ():

public virtual void Application_OnError()
{
    if ( // identified as routing error )
    Server.TransferRequest( Context.Request.RawUrl, false );
    return;
}

Проблема в том, что на нашем сервере разработки (на котором работает сервер 2008 R2, с IIS 7.5 и .NET 3.5) возвращается пустая страница беззаголовки, но на моей рабочей станции (на которой работает win7, IIS 7.5 и .NET 3.5) все работает нормально.

Что может быть причиной этого?Если код в Application_OnError () генерирует исключение, каков будет ожидаемый результат?

Я проверил следующее:

  • Журнал доступа показывает одну запись, я не уверен, будет ли TransferRequest отображаться как вторая запись при успешном вызове
  • Приложение фактически выполняет некоторую работу в соответствии с моими внутренними журналами, и оно не умирает, поскольку последующие запросы работают безупречно (поскольку маршрутизация будет активна)

Любые подсказки о том, что искатьбыл бы очень признателен!

Ответы [ 4 ]

1 голос
/ 01 июля 2010

Я думаю, что есть ошибка выброса, но вы ее не видите, потому что ваша страница готова к какой-то другой ошибке , и вам нужно зафиксировать ее таким образом . После этого вы можете найти настоящую проблему, потому что из моих проверок в TransferRequest может быть много мыслей, которые выдают ошибку.

public virtual void Application_OnError()
{
    if ( identified as routing error )
    {
        try
        {    
            Server.TransferRequest( Context.Request.RawUrl, false );
        }
        catch(Exception x)    
        {
            LogTheError(x.ToString());
        }
    }

    return;
}
1 голос
/ 24 июня 2010

Пул приложений на установке сервера настроен для использования интегрированного конвейера? Это должно быть в порядке для Server.TransferRequest для работы.

Из документации MSDN:

Этот метод используется при работе с интегрированным режимом конвейера в IIS 7.0 , чтобы разрешить передачу обработки запроса от одного типа ресурса к другому при выполнении целевого запроса с правильным контекстом запроса.

0 голосов
/ 01 июля 2010

Одна вещь, на которую вы должны обратить внимание - это Server.ClearError (). В Win 7 и Server 2008 есть некоторые серьезные изменения с конвейером и ошибками.

http://mvolo.com/blogs/serverside/archive/2007/12/08/IIS-7.0-Breaking-Changes-ASP.NET-2.0-applications-Integrated-mode.aspx

Посмотрите на пункт № 21 в списке.

Не уверен, что это ваша проблема, но, похоже, стоит что-то проверить.

0 голосов
/ 28 июня 2010

Возможно, вам потребуется настроить маршрутизацию во время Application_OnStart (), чтобы вовремя зарегистрировать маршрут для вашего первого запроса.

http://www.castleproject.org/monorail/documentation/trunk/advanced/routing.html
http://www.kenegozi.com/blog/2009/02/10/monorail-routing-and-the-homepage-routing-rule.aspx

Где вы сейчас регистрируете маршруты?

Дополнительные предложения

Вот еще несколько вещей, на которые стоит обратить внимание в CompleteRequest и перезаписи URL:
http://msmvps.com/blogs/luisabreu/archive/2007/10/09/are-you-using-the-new-transferrequest.aspx
http://support.microsoft.com/kb/817036

Одно из предложений - вместо этого попробовать Request.Redirect.

...