現在、次のコードがあります。
public static ICmsDataServiceWcf Data
{
get
{
if (HttpContext.Current != null && HttpContext.Current.Session != null && HttpContext.Current.Session["DataSevice"] == null)
{
HttpContext.Current.Session.Add("DataService", GetDataService());
}
if (HttpContext.Current != null && HttpContext.Current.Session != null && HttpContext.Current.Session["DataSevice"] != null)
{
return (ICmsDataServiceWcf)HttpContext.Current.Session["DataService"];
}
return GetDataService();
}
}
これの目的は、WCF クライアントの作成/破棄に伴うオーバーヘッドを最小限に抑えることです。それはかなりうまくいくようです。私が抱えている問題の 1 つは、かなりの数の要求がバックグラウンドでタスクから来ることです。これらには明らかにコンテキストがないため、return GetDataService() 行に落ちます。
私が考えているのは、WCF クライアントの静的インスタンスを作成し、それを返すことです。ただし、このアプローチについて私が懸念していることの 1 つは、多くのタスクが 1 つのインスタンスを介して多くのリクエストを行うことです。これがボトルネックになってしまうのでしょうか?もしそうなら、負荷を分散するために、たとえば 10 個の WCF クライアントのプールを作成することをお勧めしますか?
ありがとう、
ジョー