我的方案如下: 工作流XAML存储在数据库中,然后我从中创建WorkflowServiceHost,客户端可以调用它。没问题,直到这里:我在端点1处有XAML1。
稍后用户更改了xaml。据我所知,其他问题的解决方案是保留XAML1,并存储新的XAML2,并启动一个新的WorkflowServiceHost。 因此最终得到了针对XAML1 / XAML2的endpoint1 / endpoint2,客户端可以决定以哪种方式调用。
最后我的问题是,有没有办法检测到第一个WorkflowServiceHost内部没有待处理实例?我的意思是所有工作流程都在内部完成,您可以安全地处置该服务主机。
在最坏的情况下,如果实例正在运行,我可能会使用自定义跟踪参与者来记录,但也许还有其他方式....
// activity comes from xaml
var jobHost = new WorkflowServiceHost(activity, new Uri("net.pipe://localhost/WorkflowHost"));
jobHost.AddServiceEndpoint("IWorkflowHost", new System.ServiceModel.NetNamedPipeBinding(), "Job1");
// extensions
// behaviors
jobHost.Description.Behaviors.Add(_instanceStore);
jobHost.Open();
答案 0 :(得分:2)
[System.Activities.DurableInstancing] .ServiceDeployments视图将为您创建的每个endpoind包含一条记录。其主键ServiceDeploymentId是[System.Activities.DurableInstancing] .Instances视图中的外键,其中包含每个工作流实例的记录。从那里它应该是一个简单的SQL查询来查找没有相关工作流实例的端点。
答案 1 :(得分:0)
如果您只是调用一次Workflow然后处理它,您可以收听WorkflowServiceHost的Closed事件。
svchost.Closed += SomeMethod;
private void SomeMethod(object sender, EventArgs e)
{
// do something after WorkflowServiceHost has closed...
}