特定のカスタムオブジェクトに許可されている最大フィールドを見つけるための非常に単純な呼び出しを含めたい既存のRIAサービスがあります。値が変更されることはほとんどありません。必要に応じて1回だけ呼び出してから、クライアントに保持したいと思います。ただし、値を知る必要がある場合は、すぐに使用するため、同期的に知る必要があります。
私は次のことを試しましたが、.Value
このコードブロックの実行時にサービスが実際にリクエストを行うのではなく、しばらくしてから、常に0になります。
private static readonly Lazy<int> _fieldCount =
new Lazy<int>(() =>
{
const int TotalWaitMilliseconds = 2000;
const int PollIntervalMilliseconds = 500;
// Create the context for the RIA service and get the field count from the server.
var svc = new TemplateContext();
var qry = svc.GetFieldCount();
// Wait for the query to complete. Note: With RIA, it won't.
int fieldCount = qry.Value;
if (!qry.IsComplete)
{
for (int i = 0; i < TotalWaitMilliseconds / PollIntervalMilliseconds; i++)
{
System.Threading.Thread.Sleep(PollIntervalMilliseconds);
if (qry.IsComplete) break;
}
}
// Unfortunately this assignment is absolutely worthless as there is no way I've discovered to really invoke the RIA service within this method.
// It will only send the service request after the value has been returned, and thus *after* we actually need it.
fieldCount = qry.Value;
return fieldCount;
});
RIAサービスを使用して同期のロードオンデマンドサービス呼び出しを行う方法はありますか?または、次のいずれかを行う必要があります。1)定数をクライアントコードに含め、変更があった場合は更新をプッシュします。または2)完全に別個のサービスをホストします。これを同期的に呼び出すことができますか?