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