Windows Workflow 4.5范例问题

时间:2013-03-04 14:10:16

标签: asp.net-mvc-4 asp.net-web-api workflow-foundation-4

我一直在深入研究Windows Workflow 4.5作为初学者的技术细节和实现,并且取得了不错的成果。我的问题更多的是一个“为什么和什么时候”而不是一个“如何”的问题,所以请耐心等待。

我对所有人都采用了一个熟悉的概念,并将业务逻辑抽象为WF,即通用登录过程。我想要实现的是拥有可重复使用的逻辑,我可以从MVC网站,Windows窗体应用程序等调用,并让所有内容都运行在同一个工作流程中,并且我已经实现了这一点。

现在我有2个关于“何时”应用WF以及何时使用代码的概念性问题。

1 - 以简单验证为例。我正在尝试登录,但我已经传递了一个空的用户名或密码字符串。显然,我想向最终用户发送一条消息“UserName Required”和“Password Required”,我已经完成了。现在,我这样做的方式是我有一个验证类(FluentValidation NuGet包,如果它很重要),但重要的是我在代码中这样做。所以,在WF中,我通过ExecuteMethod调用我的验证代码,一切正常。我的问题是:这是WF心态的错误方法吗?我应该在内联WF“If”操作/决策中直接构建WF内部的验证消息而不是调用一些代码块吗?我不只是要求验证,而是作为一个概念,我们都可以参与,但更一般地说,我应该尝试将任何东西和我可以放入WF本身或者更好地调用自定义代码?我希望通过具有WF经验的经验丰富的软件架构师推理最佳实践,如果可能的话,可以与某人的意见相提并论。

2 - 在另一台计算机上提取工作流程。因此,同一登录工作流活动的一部分需要服务方法调用。我已经编写了代码和工作流,工作流接收ILogOnService的In参数,该参数具有接口方法“AuthenticateUser”。我传入的具体实现调用了异步中的MVC4 Web Api post方法来执行标准的Asp.Net成员身份ValidateUser。我是否应该从WF工作流程中调用此Web Api PostAsync?如果是这样,那么我的工作流程是否与Asp.Net Membership以及我的特定服务选择紧密相关。似乎有办法让工作流程到达某一点,然后在另一台机器上恢复该过程,例如服务正在运行的地方,并继续该过程,但我无法找到尝试这一过程的好例子。

只是寻找专业人士的一些指导方针和想法,但我会选择最有用的答案。

1 个答案:

答案 0 :(得分:2)

使用C#代码实现工作流程的细节没有任何问题。事实上,我总是告诉人们,如果他们只使用标准的开箱即用活动WF4他们可能做错了。您确实需要创建或让其他人为您的自定义活动执行此操作,以便为您的业务建立业务活动。现在,如果这意味着使用完全正常的FluentValidation创建验证登录的活动。另一次,您可以从较低级别的WF4活动中构建更高级别的业务活动,只需将它们组合为最适合您的情况。

如果您知道该操作是短暂的并且通常可用,则使用类似PostAsync的方式调用服务可以很好地工作。但是,当您进入SOA样式时,您确实希望开始使用temporal decoupling,因此一项服务不依赖于另一项可立即使用的服务。当你进入时间解耦时,你真的想要使用队列,也许是MSMQ或者其他类似的技术。所以在那个cas中你真的想发送一个带有响应队列的单向消息,并且必须让工作流进入空闲状态并等待响应消息到达。这将重新加载workfloe,可能在另一台机器上。现在这可能并不总是合适的,例如在您的登录中,由于成员资格服务不可用而导致一天后授予登录没有多大用处,但可能会导致系统具有可扩展性和容错性。当然没有免费的午餐,因为这些系统很难正确设计。