ステータスの更新のために WCF サービスの静的変数にアクセスできるかどうか、またできる場合はどうすればよいか知りたいです。
何千もの製品を更新する長いプロセスがあります。このプロセスは asp.net ページから開始され、ユーザーは、プロセスの実行中にサービスからのステータス更新 (つまり、「製品 123 の処理」) を要求します。私はサービスを持っており、ステータス更新のためにサービスをポーリングするために使用したい更新パネル内にタイマー コントロールがあります。タイマー コントロールがポストバックするときに、GetStatus メソッドを使用してサービスにクエリを実行して現在のステータスを取得すると考えていましたが、サービスの新しいインスタンスが Page_Load で作成されるため、ステータス メッセージは常に同じになると思います。では、WCF サービスから asp.net ページへの実行ステータス変数を取得するにはどうすればよいでしょうか?
protected void Timer1_Tick(object sender, EventArgs e)
{
if (statusMessage == null)
{
// feed operation finished or timer is running invalid
Timer1.Enabled = false;
}
try
{
UpdateStatusDisplay();
}
catch (Exception exp)
{
....
}
}
私のWCFサービスで
public string Status = "";
public void BeginImport(ImportOptions options)
{
_options = options;
string conString = ConfigurationManager.ConnectionStrings["String1"].ConnectionString;
using (var con = new SqlConnection(conString))
{
con.Open();
var products = con.Query("SELECT * FROM PRODUCTS");
foreach (var product in products)
{
Status = "Processing product " + product.ProductName);
}
}
}
public string GetStatus()
{
return Status;
}
編集: [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] について読んだところですが、これだけで十分ですか?