我创建了一个简单的工作流服务应用程序 (WF1),然后在我的解决方案中添加了一个 Windows 窗体客户端,其中包含另一个工作流活动 (WF2)。然后我添加了对 WF1 的正确服务引用。当我尝试使用我的服务引用将消息调用从 WF2(Windows 窗体)添加到 WF1(工作流服务应用程序)时......工具箱中没有任何项目代表我的服务引用 WF1!它不见了。没有运气尝试添加它......我迷路了。有任何想法吗?
1 回答
观看视频后,根据您上面的第二条评论,我认为没有必要尝试将 WorkflowService 用作其他工作流中的活动,就像视频显示的那样。意识到,在视频中,他只是拨打了其中一项服务操作的电话。工作流控制台模板项目允许通过将操作包装在 Activity 中以这种简单的方式调用服务操作,从而使您不必实例化代理客户端。还有其他方法可以达到相同的结果。
我会做什么:将 WinForms 客户端中的服务引用添加到 WorkflowServiceApp,WF1(您已经这样做了)。在第二个工作流 (WF2) 中,实例化 WF1 类型的代理并直接调用服务公开的操作,就像您不在工作流中时调用任何正常的服务操作一样。它基本上是在使用 WCF 服务。一种选择是创建服务类型的变量,实例化新的引用,例如,Assign 活动,创建服务结果类型的变量,最后调用服务,或者在其他 Assign 或 InvokeMethod 活动中。
第一次分配活动:
proxy = New WF1Client() //That has to be the name of you client as created by the Service Reference
第二次分配活动:
Result = proxy.MyMethod(...) //The call to the operation. You would have to create the variables to hold the result and any input parameters you wish to pass to the operation.
那将是直截了当的。您不需要将服务本身用作 Activity。
如果您仍然需要在设计器内部使用单个活动或在其他工作流之间共享,请创建一个Code Activity,调用其中的服务操作(实例化代理、设置输入等),编译和您的代码活动将出现在工具箱中,因此您可以在 WF2 中使用它。此外,如果您创建一个 ClassLibrary,并实施您的活动,无论是 WF 附带的活动还是那里的自定义活动,您都可以通过引用 ClassLibrary 在不同的工作流项目中重用它们。如果您可以控制 WF1 的开发,则可以使用这种方法来重用您的活动。
希望这可以帮助。