问题标签 [workflowservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
workflow-foundation-4 - IIS7.5 应用程序池/工作进程混合问题中的工作流服务 (WF4)
问题
不同应用程序池中我的 2 个工作流服务的 WCF 请求没有被它们各自的工作进程处理。相反,两个工作进程都在处理两个工作流服务的 WCF 请求。此问题仅发生在“集成”托管管道模式中,而不是“经典”托管管道模式中。
设置
- 2 在 IIS 7.5 中运行的 Worflow 服务 (Workflow Foundation 4.0)。
- 每个工作流服务都设置为 IIS 中的应用程序,并拥有自己的应用程序池和自己的身份凭据。
- 应用程序池在“集成”托管管道模式下运行。
描述
例如,我有分别在UserA和UserB下运行的工作流服务 A ( WFSA ) 和 B ( WFSB ) 。他们都期望通过工作流中的接收活动调用 WCF。
当我启动 2 个应用程序池时,我可以看到 2 个 w3wp.exe 工作进程正在运行,一个作为UserA,另一个作为UserB。我希望UserA的 w3wp.exe 工作进程应该处理WFSA的 WCF 请求,而UserB的 w3wp.exe 工作进程应该处理WFSB的 WCF 请求。
但是,当我开始向工作流发送 WCF 消息时,我可以通过跟踪日志文件看到两个 w3wp.exe 进程正在处理两个工作流服务的请求。
例如,WFSA的 WCF 消息由UserA和UserB的 w3wp.exe 工作进程处理。因此,如果我向WFSA发送 10 条 WCF 消息,则 4 条将由 w3wp.exe 为UserA处理,6 条将由 w3wp.exe 为UserB处理。
当我将应用程序池切换到“经典”托管管道模式时,WCF 消息将按预期路由到相应的工作进程。
是否有一些我缺少的配置?
任何帮助是极大的赞赏。
更新
在我正在处理的项目中,WFSA、WFSB和另一个 WCF 服务应用程序 ( WCFApp ) 在以下配置中相互通信:
WFSA <==> WFSB <==> WCFApp
我们在以下场景中看到问题:
- WFSA ==> WFSB ( UserA ):WFSA在WFSB上实例化一个新的工作流,该工作流在 w3wp.exe 上为UserA处理。
- WFSB ( UserA ) ==> WCFApp:WFSB调用WCFApp,它会做一些处理。
- WCFApp ==> WFSB ( UserB !!!):处理后,WCFApp通知WFSB已完成。但是 WCF 消息由UserB的 w3wp.exe 进程处理!!!当然工作流实例在那里不存在,因此它会出错并显示以下消息:
请求的资源已移动到以下位置之一: http://server/AppFolder/WFSB.xamlx/INotifyWhenDone
我可以通过设置来解决这个问题:
这意味着工作流在空闲时将立即持久化,并且可以处理发送到错误工作进程的消息,因为它可以在持久性数据库中找到工作流实例。但是,这种解决方案是不可接受的,因为持久性非常慢。
.net - 工作流允许参数定义但不允许工作流服务?
在过去的几个月里,我一直在广泛使用 WF 4,我注意到在 WF 设计器上有一个“参数”按钮,您可以单击然后查看列表和/或添加其他参数。
向 WF 服务添加参数会非常有益,但在设计器中您没有相同的选项。是否可以在 XAML 中定义参数,或者是否有某种原因不允许使用参数?
我想将参数传递给我与设计器一起构建的工作流服务。理想情况下,我想将一个字符串参数从托管它的应用程序(Win 服务)传递给 WF 服务。同一个应用程序还托管一个 Xaml 工作流,我传入几个参数以允许 WF 在运行时完成它的工作。
workflow-foundation - SQL 工作流实例存储的重试行为是什么?
我无法找到有关 SqlWorkflowInstanceStore 如何以及它如何处理退休的任何文档。
在 Workflow 3.x 中,您可以设置一个名为“EnableRetries”的属性,当 Persistence Store 不可用时允许重试,但我似乎在 Workflow 4 中看不到任何类似的东西。澄清一下,我知道“EnableRetries”在 .NET 4 中,但这是针对旧工作流的。
我使用的是工作流服务而不是应用程序或调用程序。
任何人都可以解释一下吗?或者指出我正确的方向?
谢谢,约翰
wcf - 为工作流服务提供工作流扩展 - WF 4.0
问候一个和所有!
我是 WF 4.0 和 WWF 的新手,所以如果这似乎是一个新手类型的问题,请原谅我,但请相信我,我已经在互联网的深处搜寻了解决这个问题的方法,但无济于事。
我创建了一个带有自定义 CodeActivity 的示例 WF 应用程序,该应用程序需要提供扩展,如下所示:
然后,我将此活动插入到工作流服务中,并尝试通过添加服务引用来通过我的 Web 应用程序使用。但是,当我添加参考时,我得到:
System.Activities.ValidationException:必须配置“PizzaMan.ActivityLibrary.IPreparePizzaExtension”类型的扩展才能运行此工作流。
很公平——当然,我的活动要求我将 IPreparePizzaExtension 的实现传递给它——毕竟,我已经告诉它了!
所以我的问题是,我到底如何将它传递给服务?我可以在控制台应用程序场景中使用 WorkflowInvoker 轻松管理此操作,但我看不到任何明显的方法可以通过服务方法执行此操作。我会假设显然需要一种添加引用的程序化方法,但是我再次对如何进行此操作感到茫然。
任何帮助将不胜感激。
最好的问候伊恩
wcf - 使用自托管 WorkflowServiceHost 重新启动持久化工作流
我正在尝试解决如何恢复我使用 WorkflowServiceHost 自托管的持久工作流。目前我的主机连接持久性和空闲行为,如下所示:
我将工作流实例 GUID 与数据库中的 ProductID 存储在工作流中包含的自定义活动中,因此我能够轻松地将特定工作流实例跟踪到产品 ID。我希望能够以某种方式将此产品 ID 传递给我的 ServiceHost,并让它为我恢复正确的持久工作流。
谁能指出我如何做到这一点的正确方向?
非常感谢伊恩
workflow - 将工作流保存在数据库中
全部
有什么方法可以序列化工作流并保存在数据库中并稍后加载?
如何在 C# 中将工作流实例保存在数据库中?
谢谢
wcf - 如何处理乱序的“接听”电话?
我有一个模拟销售漏斗的 WF4 服务。它的工作原理是从“注册”接收呼叫开始。之后,有 10 个类似的阶段(每个阶段由 2 个接收组成)。在当前阶段验证接收到的数据之前,您无法超越一个阶段。我不确定的是,即使我的客户端应用程序不允许这样做,我怎样才能让我的工作流程阻止任何人无序调用接收操作?在我的测试控制台应用程序中,我让用户调用任何接收操作(只是因为我想看看会发生什么)。
例如,如果我先调用 Register,然后在“AddProspect”接收之前接收“AddQualification”,则测试应用程序会返回如下异常:
目前无法对标识符为“1984c927-402b-4fbb-acd4-edfe4f0d8fa4”的服务实例执行“AddQualification|{http://tempuri.org/}IZSalesFunnelService”操作。请确保以正确的顺序执行操作,并且使用中的绑定提供有序的交付保证
两件事来自于此,我不知道该怎么做:
首先,我如何处理错误异常以有意义的方式通知客户端并且......
其次,因为我正在使用持久性(和属性提升),所以当我进行无序调用时,提升的属性会卸载。客户收到异常后,他们不会再次升级。
有什么想法吗?
wcf - 在 IIS 中托管自托管 WF
有谁知道是否可以在 IIS 中托管自托管的 WorkflowServiceHost 应用程序而不将其转换为 XAMLX 文件?如果是这样,怎么做?
此外,对于将 XAMLX 文件通常部署到 IIS 7,是否有人有任何好的指导方针?
提前致谢
workflow-foundation - 如何在没有设计器的情况下实现 Workflow 4.0 Services ReceiveAndSendReply 活动
我想使用 Receive 或 ReceiveAndSendReply 活动将代码活动编写为工作流服务,但我不想使用设计器。定义 WCF 端点和服务/数据协定的最佳方式是什么(设计器通常会确定它们并将它们构建到 xamlx 文件中,但我想在代码中完成所有这些工作)。
version-control - 服务合同发生变化的 WF4 工作流版本
我刚刚使用 WCF 的路由服务成功实现了一个 WF4“版本控制”系统。我有一个 version1 工作流服务,我向其中添加了一个新的 Decision 活动并将其保存为 version2 服务。所以现在我有 2 个端点(具有相同的服务合同,即两个服务的所有接收活动都是相同的)和一个检查消息内容的路由器(对象上的“versionId”字符串,我的所有接收都接受为参数)来决定要命中哪个端点。
我的问题是,虽然在没有对服务合同进行任何更改时这可以正常工作,但如何处理从我的服务合同中添加或删除方法并创建 version3 服务的需要?我最初的想法是,当我将服务引用添加到我的客户端时,我使用最新的工作流服务的端点来获取最新的服务合同。然后,在配置文件中,我将连接的端点更改为路由器的端点。但是如果 v1 和 v2 的合同与 v3 不同,这将不起作用。我的代理将拥有 v3 的方法,而忘记所有关于 v1 和 v2 的信息。
关于如何处理这个问题的任何想法?我应该在我的工作流解决方案中创建一个实际的服务合同接口(而不仅仅是在我的接收活动中提供一个 ServiceContractName)?