В Workflow Foundation 3.5 мы могли отслеживать данные с помощью SqlTrackingService, но в WF это не работает: при попытке использовать SqlTrackingService не перехватывает какой-либо рабочий процесс или событие активности.
Есть ли способ настроить SqlTrackingService в WF 4.0 без написания пользовательской службы трассировки? Дело в том, что я хочу использовать как можно больше встроенных инструментов (например, WorkflowMonitor из примеров MS)
Вот два примера:
WF3.5 (работает отлично, обратите внимание, что My3Activity необходимо скомпилировать как .NET 3.5 Workflow Activity Library)
namespace WfServiceHost
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Creating workflow runtime...");
using (WorkflowRuntime wr = new WorkflowRuntime())
{
SqlTrackingService ts = new SqlTrackingService("Initial Catalog=Tracking;Data Source=localhost;Integrated Security=SSPI;");
ts.UseDefaultProfile = true;
wr.AddService(ts);
wr.StartRuntime();
Console.WriteLine("Creating workflow instance...");
WorkflowInstance wi = wr.CreateWorkflow(typeof(My3Activity));
Console.WriteLine("Starting workflow instance...");
wi.Start();
Console.WriteLine("Workflow instance started");
Console.WriteLine("Press any key to STOP");
Console.ReadKey();
}
Console.WriteLine("Workflow runtime stopped.");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
WF4.0 (не вызывает никаких событий или, возможно, они не отслеживаются службой отслеживания; на этот раз MyActivity - библиотека действий .NET 4.0 WF)
namespace WfServiceHost
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Creating workflow runtime...");
using (WorkflowRuntime wr = new WorkflowRuntime())
{
SqlTrackingService ts = new SqlTrackingService("Initial Catalog=Tracking;Data Source=localhost;Integrated Security=SSPI;");
ts.UseDefaultProfile = true;
wr.AddService(ts);
wr.StartRuntime();
Console.WriteLine("Creating workflow instance...");
MyActivity activity = new MyActivity();
WorkflowApplication app = new WorkflowApplication(activity);
Console.WriteLine("Starting workflow instance...");
app.Run();
Console.WriteLine("Workflow instance started");
Console.WriteLine("Press any key to STOP");
Console.ReadKey();
}
Console.WriteLine("Workflow runtime stopped.");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}