Сервер. TransferRequest возвращает пустую страницу на определенном сервере

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

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

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

Так как проблема - это на нашем сервере разработки (который выполняет сервер 2 008 R2, с IIS 7.5 и.NET 3.5) возвращает пустую страницу без заголовков, но на моей рабочей станции (который выполняет win7, IIS 7.5 и.NET 3.5), это хорошо работает.

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

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

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

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

1
задан jishi 17 June 2010 в 09:30
поделиться

4 ответа

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

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

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

1
ответ дан 2 September 2019 в 23:42
поделиться

Возможно, вам потребуется настроить маршрутизацию во время 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.

0
ответ дан 2 September 2019 в 23:42
поделиться

Я думаю, что есть ошибка выброса, но вы ее не видите, потому что ваша страница готова к другой ошибке , и вам нужно ее зафиксировать таким образом . После этого вы можете найти настоящую проблему, потому что из моих проверок в 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
ответ дан 2 September 2019 в 23:42
поделиться

Одна вещь, на которую вам следует обратить внимание, это 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
ответ дан 2 September 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: