Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows工作流基础WF4-工作流托管_C#_.net_Workflow Foundation 4 - Fatal编程技术网

C# Windows工作流基础WF4-工作流托管

C# Windows工作流基础WF4-工作流托管,c#,.net,workflow-foundation-4,C#,.net,Workflow Foundation 4,对于客户端,我们正在创建的系统必须支持以下内容: -必须能够使用不同的上下文(不同的数据/业务对象)运行多个工作流以及同一工作流的多个实例。 -某些工作流将长期运行,涉及多个用户/客户端会话,并等待外部用户输入。因此,工作流必须能够持久化并响应来自客户端应用程序的某些信号。这也意味着工作流的执行必须在服务器应用程序上完成(对吗?)。 -我希望能够在服务器应用程序上运行所有类型的工作流,并且不希望在工作流更改时必须重新部署服务器应用程序 我的第一个想法是工作流服务。经过大量研究,我得出结论,这不是

对于客户端,我们正在创建的系统必须支持以下内容:
-必须能够使用不同的上下文(不同的数据/业务对象)运行多个工作流以及同一工作流的多个实例。
-某些工作流将长期运行,涉及多个用户/客户端会话,并等待外部用户输入。因此,工作流必须能够持久化并响应来自客户端应用程序的某些信号。这也意味着工作流的执行必须在服务器应用程序上完成(对吗?)。
-我希望能够在服务器应用程序上运行所有类型的工作流,并且不希望在工作流更改时必须重新部署服务器应用程序

我的第一个想法是工作流服务。经过大量研究,我得出结论,这不是正确的路径,因为工作流服务基本上提供了从客户端应用程序中启动的工作流在远程位置执行活动的可能性。这是正确的吗?或者我可以为上述场景使用工作流服务吗?大多数示例和/或教程基本上都是接收信号/发送信号的组合,中间有一些逻辑

基本上,我希望(从客户端应用程序)启动具有特定上下文的工作流(在工作流服务器应用程序中)

最好的方法是什么


非常感谢您的帮助

至于您的要求:

必须能够使用不同的上下文(不同的数据/业务对象)运行多个工作流以及同一工作流的多个实例

WF没有问题

某些工作流将长期运行, 涉及多个用户/客户端会话 并等待外部用户输入。 因此,工作流必须能够 并对某些信号作出反应 从客户端应用程序。这也意味着 工作流的执行必须 可以在服务器应用程序上完成(对吗?)

WF是为能够与外部影响交互的长时间运行任务而设计的。然而,这并不是说它很容易实现;没有一个通用的解决方案可以供您使用。您可能必须设计与之交互的自定义活动,以便将用户输入移动到工作流中。与将工作流对外公开相同,尽管WF4确实附带了大量WCF活动,可用于完成此任务

我希望能够运行各种各样的 服务器应用程序上的工作流,我会 不想重新部署 工作流更改时的服务器应用程序

这是很难做到的。您必须至少将工作流与服务器代码分开。最简单的方法是将您的工作流存储为xaml,并从(比如)数据库中存储

其他选项是使用某种依赖项注入框架(如结构映射或Unity),在运行时加载工作流程序集。如果工作流发生更改,则可以在服务器上删除新程序集,更改配置并重新启动。或者,您可以在自己的AppDomain中隔离工作流程序集,在运行时加载它们,并在必须重新加载新版本时丢弃该域。你做哪一个取决于你的要求;我实际上在做第三个选择,因为我必须在运行时加载许多不同版本的工作流程序集,并发运行它们,而且它们通常具有嵌入式资源,从而阻止我使用XAML路径

我的第一个想法是工作流 服务。经过大量的研究,我 得出结论认为这是不对的 工作流服务的路径 提供执行的可能性 从远程位置执行的活动 工作流已在客户端应用程序中启动。是 这对吗

我正在标准Windows服务应用程序中托管我的工作流。我必须管理和维护客户端用于与我的工作流交互的WCF前端。据我所知,如果我理解正确,工作流服务似乎是稳定工作流的可行选择。在AppFabric中托管应用程序也是一个不错的选择,而且我相信比使用Windows服务更简单。但是,无论主机是什么,您都有两个选择--您的工作流定义服务契约,或者您必须定义服务契约并处理与您正在管理的工作流的所有执行和通信

第一个是使用简单外观的稳定工作流的好选择。对于您来说,这似乎不是一个好的选择,因为您必须在工作流更改时动态加载工作流;这需要工作流之外的逻辑来处理来自客户端的通信(“这是工作流X的新版本!”),还需要管理工作流的生命周期

看起来您必须找到某种主机应用程序(IIS WebService应用程序、Windows服务、AppFabric、Azure),定义WCF服务并使其联机,处理来自客户端的调用,将这些调用传递给工作流运行代码,然后必须加载和执行这些调用,并返回链上的结果


我忍不住注意到,你似乎对等待你的旅程准备不足。我强烈建议您创建一个原型,将您的需求的最核心部分整齐地分割开来。一个托管应用程序(我建议使用AppFabric),带有一个WCF前端,加载一个处理客户端调用的基于XAML的工作流。一旦您确定了简单的版本,您就可以扩大范围以涵盖您的所有需求。

非常感谢您的回答。这证实了我的怀疑:-)很抱歉,我早就应该将你的答案标记为已接受。您好,我已经完成了WCF Xamx WF服务,并将其托管在IIS中。我还启用了sql持久性。我编写了一个简单的客户端来调用web服务并执行工作流。但我一次只能连接一个客户端。当我连接第二个客户机而第一个客户机连接时,它会给出一个错误。@KasunKoswattha好吧,那太糟糕了。祝你好运