使用WorkflowServiceHost托管工作流程

好的,所以我可能会错误地处理这个问题,但本质上我试图在4.0中使用新的WF服务来构建一个承载WF服务的Windows服务。 目前我已经构建了客户端(包含一个简单的Activity XAML)和服务(在XAMLX文件中实现了WF服务)项目。

我为每一个尝试过简单的“你好世界”。 客户端已被托管在WorkflowApplication ,我最初将该服务设置为默认的WF服务项目模板。 在那里似乎都很好。

由于我想在没有IIS的情况下托管一项服务,因此我的下一个尝试就是将我的服务托管在WorkflowServiceHost 。 这样做,我可以使用XamlServices.Load()并将它返回的对象连同端点的URI一起传递给WorkflowServiceHost构造函数。 我担心,因为没有Run()成员方法,就像在WorkflowApplication类中那样。 我认为Open()方法会将服务主机对象作为服务来打开,并且它会启动工作流的实例,但没有指示它。

起初,我将服务工作流设置为在开始时写入文本文件,但没有发生任何事情。 我试图用断点进行调试,但由于它在运行时加载了XAMLX文件,因此VS不允许我调试WF。 所以我尝试改变客户端项目来使用WorkflowServiceHost而不是WorkflowApplication 。 我使用了用于测试hello世界风格工作流的相同工作流程,这一次没有输出到控制台,并且WorkflowApplication与之前的WorkflowApplication成功。

以下是我用客户端在控制台项目中托管工作流服务的基础知识。 如果有人想看到工作流程的XAML,请告诉我,我会更新这个问题。 这是Main()的托管代码。

const String clientAddress = "http://localhost:9998/Client";    
WorkflowServiceHost wfHost = new WorkflowServiceHost( new ClientWf(), new Uri(clientAddress) );
wfHost.Open();

while( Console.ReadKey().KeyChar.ToString().ToUpper() != "X" ) {    }

wfHost.Close();

我发现,由于您无法直接启动由WorkflowServiceHost对象包装的WF实例,因此可能需要使用WorkflowApplication才能完成一个简单的方法调用,但这种方法几乎不可能执行它。 有一个“窍门”让WF开火,但需要一些我在这个时候没有给予时间的黑客攻击。 MSDN有一个模糊的参考,你可以在这种情况下做什么,在托管非服务工作流程下

这是我的解决方案:使用WorkflowServiceHost和WorkflowApplication。 你为什么问? 那是因为我试图用一个小小的包装来做很多事情。 我还将此作为我的工作的自定义服务模型进行构建,最好将业务逻辑(WorkflowApplication)与所有通信实现(WorkflowServiceHost)分开。 这种服务正好适用于这种方式,因为当然现在是我的基础通信。 工作流程以接收活动开始,WorkflowSericeHosts在关联工作流程的根目录中查找某种类型的消息传递活动,以启动实例。

现在我是一个快乐的露营者。 我的业务逻辑完成了预期的工作,并且工作流服务正在充实。 更好的是,我有一个模型,可以动态地放下业务逻辑以动态设置和部署自定义数据处理/运行服务。 现在只需完善电话回复功能即可实现远程“仪表板”的日期,这就是我正在接下来的工作。

链接地址: http://www.djcxy.com/p/95887.html

上一篇: Hosting Workflows with WorkflowServiceHost

下一篇: Workflow Foundation 4 WorkflowServiceHost Message Correlation