2

IHttpAsyncHandler と XMLHTTPRequest を使用して、次の URL を使用してメッセージをクライアントにプッシュしています: http://www.codeproject.com/Articles/42734/Using-IHttpAsyncHandler-and-XMLHttpRequest-to-push しかし、実際にはいくつかの変更を加えています。この例は 1 つのクライアントのみに基づいており、複数のクライアントにメッセージを送信する必要があるため、これらの変更を行います

public void ProcessRequest(HttpContext context)
{
        var recipient = context.Request["recipient"]; 
        lock (_obj)
        {               
            string[] totalfrnds = ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20").Split(',');//<- This is just an example for many clients

            foreach (var a in totalfrnds)
            {
                var handle = MyAsyncHandler.Queue.Find(q => q.SessionId == a);//<- check who's client is online or not

                if (handle != null)
                {
                    handle.Message = context.Request["message"];

                    handle.SetCompleted(true);
                }
            }
        }
 }

エラーのスナップショット

今、私は2つの問題を抱えています

  1. このタイプのエラーを解決するにはどうすればよいですか? これは永続的なエラーではなく、ランダムに発生します。

  2. W3wp.exe の非同期スレッドの制限は何ですか。25 リクエストを超えると次のリクエストを開くことができず、IIS をリセットしてアプリケーションを再開する必要があります。

4

1 に答える 1

1

このタイプのエラーを解決するにはどうすればよいですか?

競合状態があります -呼び出し時にSetCompletedコピーを取るようにメソッドを変更してください。Callback

var handler = Callback;
if (isCompleted && handler != null)
{
    handler(this);
}

W3wp.exe の非同期スレッドの制限は何ですか

これはmachine.config、サーバー上のファイル、特にセクションのmaxWorkerThreads要素で構成されます<processModel>。ドキュメントによると、デフォルトは20です。

プロセスに使用されるワーカー スレッドの最大量を CPU ごとに構成します。たとえば、シングル プロセッサ サーバーでこの値が 25 の場合、ASP.NET はランタイム API を使用してプロセス制限を 25 に設定します。2 プロセッサ サーバーでは、制限は 50 に設定されます。既定値は 20です。maxWorkerThreads の値は、構成セクションの minFreeThread 属性設定以上である必要があります。

于 2013-02-19T13:33:41.530 に答える