2010-06-17 8 views
1

У меня возникла проблема, которая, похоже, связана с конфигурацией.Server.TransferRequest возвращает пустую страницу на конкретном сервере

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

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

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

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

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

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

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

ответ

1

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

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

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

+0

Хорошее предложение, однако пул приложений установлен как интегрированный, так что это не так, извините. – jishi

0

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

Я зарегистрировал их в Application_OnStart() сегодня, и я думаю, что есть первый вопрос, который запускает запуск приложения, где RoutingModuleEx фактически вызывается перед запуском приложения (следовательно, не переписывая первый запрос). Я думаю, что он работает корректно только при определении маршрутов в web.config, а не в коде. – jishi

+0

На самом деле я не помню, почему мы использовали Server.TransferRequest, но я думаю, что это должно было сделать его прозрачным для посетителя, но все же запросив запрос через все доступные модули. Ответ Response.Redirect, вероятно, будет работать, но это должно сработать, поскольку оно «работает на моей машине». – jishi

1

Я думаю, что есть ошибка броска, но вы ее не видите, потому что ваша страница готова к другой ошибке , и вам нужно ее захватить таким образом.После этого вы можете найти настоящую проблему, потому что из моих проверок в 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; 
} 
+0

Я попробую это, спасибо! – jishi

0

Прежде всего, вы должны изучить 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

Хм, но мой dev-machine - это Win 7 (который работает), а сценический сервер - 2008 R2 (который не работает). Я предполагаю, что эти версии должны быть почти одинаковыми? – jishi

+0

Я предполагаю, что есть изменения между 2008 R2 и Win 7, которые, возможно, не были пойманы. Возможно, было бы интересно попробовать машину 2008 года (не R2) и посмотреть, есть ли у вас эта проблема. Я предполагаю, что вы, вероятно, этого не сделаете. – spinon

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

  • Нет связанных вопросов^_^