Я сталкиваюсь с проблемой, которая, кажется, связана с конфигурацией.
У меня есть 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 () выдает исключение, каков был бы ожидаемый вывод?
Я проверил следующее:
Любые подсказки, что искать, значительно ценились бы!
Настроен ли пул приложений на установке сервера для использования интегрированного конвейера? Он должен быть установлен для работы Server.TransferRequest
.
Из документации MSDN:
Этот метод используется при работе в режиме интегрированного конвейера в IIS 7.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.
Я думаю, что есть ошибка выброса, но вы ее не видите, потому что ваша страница готова к другой ошибке , и вам нужно ее зафиксировать таким образом . После этого вы можете найти настоящую проблему, потому что из моих проверок в 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;
}
Одна вещь, на которую вам следует обратить внимание, это Server.ClearError(). В ней есть некоторые ломающие изменения по сравнению с Win 7 и Server 2008 с конвейером и ошибками.
Посмотрите на пункт #21 в списке.
Не уверен, что это ваша проблема, но кажется, что это может быть что-то, что стоит проверить.