Visual Studio 2010のベータ2バージョンを使用して、WF4を使用して高度な学習を行っています。私はWF_WCF_SamplesSDKのSqlTrackingSampleを使用しており、追跡データを出力してSQLデータベースに格納する方法をかなりよく理解していますが、必要なときにデータをクエリする方法については何も見ていません。追跡データのクエリに使用される.Netクラスがあるかどうかを誰かが知っていますか?ある場合は、追跡データのクエリ方法を説明する既知のサンプル、チュートリアル、または記事がありますか?
2436 次
3 に答える
1
MicrosoftWF4チームのMattWinklerによると、追跡データをクエリするための組み込みAPIはなく、開発者は自分で作成する必要があります。
于 2010-01-18T17:05:50.390 に答える
0
これらは役に立ちます:
于 2010-01-15T13:36:10.793 に答える
0
古い質問ですが、実際にはAppFabricには多かれ少なかれ公式のAPIがあります:WindowsServerAppFabricクラスライブラリ
実際のDLLは%SystemRoot%\ AppFabricで見つける必要があります(もちろん、AppFabricをインストールした後)。それを置くにはかなり奇妙な場所。
注目すべき主要なクラスは、SqlInstanceQueryProvider、InstanceQueryExecuteArgsです。クエリAPIは非同期であり、次のように使用できます(C#):
public InstanceInfo GetWorkflowInstanceInformation(Guid workflowInstanceId, string connectionString)
{
var instanceQueryProvider = new SqlInstanceQueryProvider();
// Connection string to the instance store needs to be set like this:
var parameters = new NameValueCollection()
{
{"connectionString", connectionString}
};
instanceQueryProvider.Initialize("Provider", parameters);
var queryArgs = new InstanceQueryExecuteArgs()
{
InstanceId = new List<Guid>() { workflowInstanceId }
};
// Total ruin the asynchronous advantages and use a Mutex to lock on.
var waitEvent = new ManualResetEvent(false);
IEnumerable<InstanceInfo> retrievedInstanceInfos = null;
var query = instanceQueryProvider.CreateInstanceQuery();
query.BeginExecuteQuery(
queryArgs,
TimeSpan.FromSeconds(10),
ar =>
{
lock (synchronizer)
{
retrievedInstanceInfos = query.EndExecuteQuery(ar).ToList();
}
waitEvent.Set();
},
null);
var waitResult = waitEvent.WaitOne(5000);
if (waitResult)
{
List<InstanceInfo> instances = null;
lock (synchronizer)
{
if (retrievedInstanceInfos != null)
{
instances = retrievedInstanceInfos.ToList();
}
}
if (instances != null)
{
if (instances.Count() == 1)
{
return instances.Single();
}
if (!instances.Any())
{
Log.Warning("Request for non-existing WorkflowInstanceInfo: {0}.", workflowInstanceId);
return null;
}
Log.Error("More than one(!) WorkflowInstanceInfo for id: {0}.", workflowInstanceId);
}
}
Log.Error("Time out retrieving information for id: {0}.", workflowInstanceId);
return null;
}
明確にするために、これでは、監視データベースに保存されている追跡データにアクセスすることはできません。このAPIは、永続データベース専用です。
于 2012-09-04T10:58:33.770 に答える