0

この問題に関するいくつかの質問を見てきましたが、私の問題に対する適切な回答が見つかりませんでした。最初は、jsonを関数に記述した後、次のコードを使用していました

            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.SuppressContent = True;
            HttpContext.Current.ApplicationInstance.CompleteRequest();

Server cannot append header after HTTP headers have been sent例外が発生していました。

だから私はコードを

try {
    HttpContext.Current.Response.Write(Data);
    HttpContext.Current.Response.End();
} catch (System.Threading.ThreadAbortException exc) {
    try {
        //Sends the response buffer
        HttpContext.Current.Response.Flush();
        // Prevents any other content from being sent to the browser
        HttpContext.Current.Response.SuppressContent = true;
        //Directs the thread to finish, bypassing additional processing
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    } catch (Exception ex) {
              //Log Exception
    }

}

これらのコードはすべて関数内にあり(たとえば) writeData()、 という関数によって呼び出されCallWriteDataます。例外は関数で正常に処理されましたが、親関数で例外WriteData()がスローされます。Thread was being abortedCallWriteData

正直なところ、私のプロジェクトでは大きな問題ではありませんが、この厄介な問題を修正するといいでしょう。また、この例外 CallWriteDataは毎回ではありません(正常に処理される場合もあります)。

4

2 に答える 2

-2

This is how IIS works. It starts a new thread for the new request. The thread does it's stuff, and when it ends the thread is aborted. Normally, this happens in the .NET plumbing and it's handles there. However, it you do something like a Server.Redirect() it'll also get aborted - in your code. Similarly with completing the request yourself as you do. IIS says "It's sent the return, so kill it." That's how it works.

(The thread is probably saved for re-use by another request, but the code just finished on it is aborted.)

于 2015-09-14T14:58:36.717 に答える