2

ASP.Net Webサイトをよりスケーラブルにしようとしていますが、WCFメソッドへの非同期呼び出しが完了する前にWeb要求を受信するASP.Netスレッドがスレッドプールに返されるかどうか、またはこのスレッドは非同期呼び出しが終了するのを待ちます。

WCFメソッドへの非同期呼び出しは、完了するまでに約20〜40秒かかります。

編集1:私のコードはページコードの以下のとおりです-非同期WCFメソッドを呼び出しているところから。WCFメソッドはWCF側で非同期であり、このページのコードビハインドから非同期で呼び出されています。

    protected void Page_Load(object sender, EventArgs e)
    {
        using (ABCService.ServiceClient sc = new ABCService.ServiceClient())
        {
           // List<ABCService.Product> products = sc.GetDocSummary("Vend1", null, false);//this is synchronous call from client
          sc.BeginGetProducts("Vend1",GetProductsCallback, sc);//this is asynchronous call from WCF
        }
    }

    protected void GetProductsCallback(IAsyncResult asyncResult)
    {
        List<ABCService.Product> products = ((ABCService.ServiceClient)asyncResult.AsyncState).EndGetProducts(asyncResult); //this will call the WCF EndGetProducts method
    }
4

2 に答える 2

1

はい、リクエストは の後に終了するため、スレッドはスレッド プールに返されますsc.BeginGetProducts。メソッドGetProductsCallbackには、処理中のリクエストに対する入力がありません。

この質問に対する私の回答を読んでください。あなたの問題に似ています。

つまり、目的を達成するには、非同期 Web ページを使用する必要があります。.Net 4.5 を使用している場合は、この記事を参照してください。

于 2012-12-25T22:01:32.467 に答える