1

わかりましたので、Web サイトのランディング ページで行う非同期 Web サービス呼び出しが多数あります。これらの呼び出しの結果をセッションに設定して、後で使用できるようにしたいのですがHttpContext.Current、コールバックで null であるためできません。基本的に、私はこのようなことをしたい:

public ActionResult Something()
{
    GetLoans();              //each of these is async
    GetPartInfo();           //and sets its result to session
    GetOtherAsyncStuff();    //(or at least it needs to)
    //lots of other stuff
    Return View();
}

GetLoans()のようになります。

public IAsyncResult GetLoans()
{
    IAsyncResult _ar;
    GetLoansDelegate d_Loans = new GetLoansDelegate(GetLoansAsync);
    _ar = d_Loans.BeginInvoke(parameter1,parameter2, GetLoansCallback, new object()); //new object() is just a placeholder for the real parameters im putting there
    return _ar;
}

を非同期的に呼び出しますGetLoansAsync。そのコールバックはGetLoansCallback()で、次のようになります。

private void GetLoansCallback(IAsyncResult ar)
{
    AsyncResult result = (AsyncResult)ar;
    GetLoansDelegate caller = (GetLoansDelegate)result.AsyncDelegate;
    List<Loan> loans = caller.EndInvoke(ar);

    Session["Loans"] = loans;   //this call blows up, since HttpContext.Current is null
}

カスタム セッション プロバイダーを実装することはできないので、そこにあるものに固執する必要があります。現状では、非同期コールバックでセッションに何も設定できません。これを回避する方法はありますか?

4

1 に答える 1

2

このブログ投稿をご覧ください。

基本的に、それはHttpContext作業完了時 (つまり、コールバック内) で使用できないと書かれており、セッション操作をGetLoansAsyncメソッドに移動する必要があるようです。

于 2012-08-10T18:24:53.023 に答える