2009-04-29 6 views
2

私のweb sevicesはflex/flashクライアントをサポートしていますが、手渡されない例外が発生した場合、System.ServiceModel.FaultExceptionを拡張するカスタムフォールトを投げます。asmx WebサービスからHTTPレスポンスコードをオーバーライドする必要があります

私は、HTTPレスポンスコードがこれはフレックス/フラッシュバグとして文書化されて200と異なっている場合は、フレックス/フラッシュがこれらのカスタム障害を読み取ることができないことが通知されています: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として戻ってきます遭遇しました

アイデア?

答えて

1

おそらく、応答ステータスコードを変更する前に、次のコードを追加する必要があります。

HttpContext.Current.ClearError() 

上書きなってから自分のステータスコードの変更を維持する必要があること。

+0

この行をApplication_PreSendRequestHeaders()とApplication_EndRequest()の両方に追加しました。 障害コードではリターンコードはまだ500です。 このコード(ServiceLayerプロジェクトのglobal.asax)が実行されていない可能性がありますか? –

+0

エラーをクリアするには、Application_Errorを実際にオーバーライドする必要があります。また、トラップしようとしているエラーの後にページに他のエラーが発生していないことを確認してください。 – jellomonkey

関連する問題