我正在使用Visual Studio 2010的Beta 2版本来使用WF4进行一些高级学习。我一直在使用WF_WCF_Samples SDK中的SqlTracking示例,并且已经非常了解如何在SQL数据库中发出和存储跟踪数据,但是在需要时还没有看到任何关于如何查询数据的信息。有没有人知道是否有任何.Net类用于查询跟踪数据,如果有的话,是否有任何已知的样本,教程或文章描述如何查询跟踪数据?
答案 0 :(得分:1)
来自Microsoft WF4团队的Matt Winkler表示,没有任何用于查询跟踪数据的内置API,开发人员必须自己编写。
答案 1 :(得分:0)
这些可以提供帮助:
答案 2 :(得分:0)
老问题,我知道,但AppFabric中实际上有一个或多或少的官方API:Windows Server AppFabric Class Library
您必须在%SystemRoot%\ AppFabric中找到实际的DLL(当然,在安装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仅适用于持久性数据库。