Asp.net mvc 4 Windows工作流4.5范例问题

Asp.net mvc 4 Windows工作流4.5范例问题,asp.net-mvc-4,asp.net-web-api,workflow-foundation-4,Asp.net Mvc 4,Asp.net Web Api,Workflow Foundation 4,作为初学者,我一直在深入研究Windows Workflow 4.5的技术细节和实现,并取得了不错的效果。我的问题更多的是一个“为什么和什么时候”的问题,而不是一个“如何”的问题 我向大家介绍了一个熟悉的概念,并将业务逻辑抽象为WF,即通用登录流程。我想要实现的是拥有可重用的逻辑,我可以从MVC网站、Windows窗体应用程序等调用这些逻辑,并让所有内容都通过相同的工作流运行,我已经实现了这一点 现在我有两个概念性的问题,关于“何时”应用WF和何时使用代码 1-以简单验证为例。我正在尝试登录,但

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

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

现在我有两个概念性的问题,关于“何时”应用WF和何时使用代码

1-以简单验证为例。我正在尝试登录,但我传递了一个空用户名或密码字符串。显然,我想向最终用户发送一条消息“需要用户名”和“需要密码”,我已经这样做了。现在,我这样做的方式是我有一个验证类(FluentValidation NuGet包,如果它重要的话),但重要的是我在代码中这样做。因此,在WF中,我通过ExecuteMethod调用我的验证代码,一切正常。我的问题是:这是WF思维的错误方法吗?我是否应该执行内嵌的WF“If”操作/决策,并在WF内部直接构建验证消息,而不是调用某些代码块?我要求的不仅仅是验证,而是作为一个我们都可以涉及到的概念,但更一般地说,我应该尝试将我能做的任何事情都放入WF本身,还是调用自定义代码更好?我正在寻找更多的最佳实践,从经验丰富的具有WF经验的软件架构师那里进行推理,如果可能的话,与其他人的意见进行比较

2-在另一台机器上拾取工作流。因此,同一登录工作流活动的一部分需要服务方法调用。我以这样的方式编写代码和工作流:工作流接收ILogOnService的in参数,该参数具有接口方法“AuthenticateUser”。我传入的具体实现调用了MVC4WebAPI post方法,以异步方式执行标准Asp.Net成员身份验证。同样,我应该从WF工作流内部调用此Web Api PostAsync吗?如果是这样的话,我的工作流程是否与Asp.Net成员资格和我的特定服务选择紧密结合。似乎有一些方法可以让工作流到达某一点,然后在另一台机器上(例如,服务正在运行的机器)恢复该流程,然后继续该流程,但我找不到尝试这样做的好例子


我只是想从这项技术的专业人士那里寻找一些指导方针和想法,但我会选择最具信息性的答案。

使用C代码实现工作流的细节没有什么错。事实上,我总是告诉人们,如果他们只是在标准的开箱即用的活动中使用WF4,那么他们可能做错了事情。您确实需要创建或让其他人为您的业务建模的自定义活动。现在,如果这意味着创建一个使用FluentValidation验证登录的活动,那么这是非常好的。还有一次,您可能会从较低级别的WF4活动中构建更高级别的业务活动,只需将它们组合起来,就可以在您的情况下发挥最佳效果


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

定制活动很有意义。例如,我已经在考虑一个简单的WebAPI活动。参数将类似于Baseurl、控制器、操作。这似乎倾向于一种适当的解耦体系结构,它可以轻松地转换为队列,甚至简单的“脱机”操作。不,我们不能让用户在一周后登录,呵呵,但你的观点是有效的。此处的队列可以替换为从5个服务中选取的LoadBalancer活动。在不对抗WF或在参数bloat中创建活动的情况下,如何优雅地传递每个配置信息?我还假设,通过创建LogOnActivity,我以后可以将其作为自定义活动重用。这意味着,在我的头脑中,当我从架构上“缩小”时,我将有一个更高级别的活动,我可以使用它来确保用户已经登录(经过身份验证)-或者-被路由到LogOnActivity,这将是一个很好的工作流,可以在BaseController内部调用OnActionExecuting等。感谢您在这里的时间,我知道这是一个模糊不清的问题。他们沿着这条路线开始了一些事情。检查。还要检查源代码。codeplex上的WF过去是MS在公开之前发布其WF活动/代码(并与某些框架版本集成)的地方。它似乎不知怎么停了下来。他是“领袖”,但不幸的是。