Необходимо переопределить код ответа Http из веб-службы asmx

Мои веб-службы поддерживают клиентов flex / flash и при необработанных исключениях выдают настраиваемые сбои, расширяющие System.ServiceModel.FaultException.

Мне сообщили, что flex / flash не может считывать эти пользовательские ошибки, если код ответа http отличается от 200. Это задокументировано как ошибка flex / flash: http://bugs.adobe.com/jira/browse/SDK-11841

Мне нужно переопределить код возврата http при необработанных исключениях. Я попытался сделать это, включив этот код в global.asax (этот хак задокументирован как временное решение):

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    if (Response.StatusCode != 200)
    { // fix response code for flex
        Response.StatusCode = 200;
    }
}

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{    
    if (Response.StatusCode != 200)    
    { // fix response code for flex        
         Response.StatusCode = 200;
     }
}

Но, увы, мой код возврата http возвращается как 500 при обнаружении необработанного исключения.

Любые идеи?


person sympatric greg    schedule 29.04.2009    source источник


Ответы (1)


Перед изменением кода состояния ответа вам, вероятно, потребуется добавить следующий код:

HttpContext.Current.ClearError()

Это должно предотвратить переопределение изменений кода состояния.

person jellomonkey    schedule 30.04.2009
comment
Я добавил эту строку как в Application_PreSendRequestHeaders (), так и в Application_EndRequest (). Код возврата по-прежнему 500 при неисправности. Возможно ли, что этот код (global.asax проекта ServiceLayer) не выполняется? - person sympatric greg; 01.05.2009
comment
Вам действительно следует переопределить Application_Error, если вы хотите сбросить ошибку. Кроме того, уверены ли вы, что какая-то другая ошибка не возникает на странице после ошибки, которую вы пытаетесь перехватить? - person jellomonkey; 01.05.2009