不使用 AppFabric 的 Workflow Foundation 4 管理

发布于 2024-12-29 03:32:02 字数 277 浏览 2 评论 0原文

我们有一个 WF4 工作流程,其中包含一系列活动作为 WCF 服务。

计算税款活动
创建订单活动
信用卡授权活动
等等......

我们的管理员正在使用 AppFabric 来管理它,并在需要时恢复、取消、终止工作流程。但我们需要将管理任务委托给仓库,并且我们不想授予运行 AppFabric 的服务器的访问权限,让他们执行此操作。

是否有一种方法可以使用框架中提供的 API 或类来管理工作流程?我们希望仓库人员跟踪并恢复工作流程(如果其中任何一个出现故障等)...

We have a WF4 workflow with a Sequence of Activities as a WCF Service.

CalculateTaxesActivity
CreateOrderActivity
CreditCardAuthorizationActivity
etc.....

Our Admin is using AppFabric to manage it and resume, cancel, terminate the Workflows if needed. But we need to delegate the task of management to the warehouse and we don't want to give access to the servers that are running AppFabric for them to do that.

Is there a way of managing the workflows by using an API or Classes available in the Framework? We want the Warehouse personnel to Track and Resume the workflows if any of them faulted etc...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人问我粥可暖 2025-01-05 03:32:03

在大多数情况下,AppFabric UI 不直接与工作流或 WorkflowServiceHost 通信,而是使用 WorkflowControlEndpointWorkflowControlClient 来执行此操作。如果您愿意,您可以从代码中执行相同的操作。

默认情况下,WorkflowControlEndpoint 使用 NetNamedPipeBinding 公开自身,因此如果您想接受来自另一台计算机的请求,则需要更改它。

WorkflowServiceHost 配置:

<service name="MyWorkflow“
         behaviorConfiguration="MyWorkflowBehavior">
  <host>
    <baseAddresses>
      <add baseAddress="http://localhost:8080/MyWorkflow" />
    </baseAddresses>
  </host>
  <endpoint address="" 
            binding="basicHttpBinding" 
            contract="IMyWorkflow" />
  <endpoint kind="workflowControlEndpoint" 
            address="Control" 
            binding="basicHttpBinding" />
</service>

客户端代码:

var instanceId = <<an existing workflow instanceId>>;

var controlBinding = new BasicHttpBinding();
var controlAddress = 
    new EndpointAddress("http://localhost:8080/MyWorkflow/Control");

var proxy = new WorkflowControlClient(controlBinding, controlAddress);

proxy.Suspend(instanceId);

The AppFabric UI doesn't directly communicate with the workflow or WorkflowServiceHost in most cases but is uses WorkflowControlEndpoint and WorkflowControlClient to do so. You can do the same from your code if you wan to.

The WorkflowControlEndpoint exposes itself using the NetNamedPipeBinding by default so you will need to change that if you want to accept requests from another machine.

The WorkflowServiceHost config:

<service name="MyWorkflow“
         behaviorConfiguration="MyWorkflowBehavior">
  <host>
    <baseAddresses>
      <add baseAddress="http://localhost:8080/MyWorkflow" />
    </baseAddresses>
  </host>
  <endpoint address="" 
            binding="basicHttpBinding" 
            contract="IMyWorkflow" />
  <endpoint kind="workflowControlEndpoint" 
            address="Control" 
            binding="basicHttpBinding" />
</service>

The client code:

var instanceId = <<an existing workflow instanceId>>;

var controlBinding = new BasicHttpBinding();
var controlAddress = 
    new EndpointAddress("http://localhost:8080/MyWorkflow/Control");

var proxy = new WorkflowControlClient(controlBinding, controlAddress);

proxy.Suspend(instanceId);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文