在asp.net网站上捕获工作流的webform事件

在asp.net网站上捕获工作流的webform事件,asp.net,events,workflow-foundation,Asp.net,Events,Workflow Foundation,基本的想法是我有一个网站和一个工作流程。我需要从我的工作流程中的aspx页面捕获按钮单击 我有一个包含worflow项目和网站项目的解决方案,web.config和global.asax已设置为与WF一起工作。还设置了持久性服务 我已经创建了一个状态机工作流。有几个状态(StateActivity)包含EventDrivenActivity实例,其中包含HandleExternalEventActivity实例。为了正确设置后者以便应用程序能够编译,我创建了一个用ExternalDataExch

基本的想法是我有一个网站和一个工作流程。我需要从我的工作流程中的aspx页面捕获按钮单击

我有一个包含worflow项目和网站项目的解决方案,web.config和global.asax已设置为与WF一起工作。还设置了持久性服务

我已经创建了一个状态机工作流。有几个状态(StateActivity)包含EventDrivenActivity实例,其中包含HandleExternalEventActivity实例。为了正确设置后者以便应用程序能够编译,我创建了一个用ExternalDataExchange属性修饰的接口,并公开了必要的事件。然后我创建了一个实现这个接口的类

这就是我能做到的。现在我需要将类连接到我的aspx页面;页面上的事件需要触发类中的事件

我的代码如下所示:

<ExternalDataExchange()> _
Public Interface ICatWorkflow
            Property RequestId() As Guid
            ...
            Sub requestInfoEmail()
        ...
        Event onReception(ByVal sender As Object, ByVal e As ExternalDataEventArgs) 
End Interface

Class MyObject
   Implements ICatWorkflow
        Public Property RequestId() As Guid Implements ICatWorkflow.RequestId
            ...
        End Property
        Public Sub requestInfoEmail() Implements ICatWorkflow.onReception
            ...
        End Sub
        Event onReception(ByVal sender As Object, ByVal e As ExternalDataEventArgs)
end class

从这里到哪里去?

我想您正在运行每个用户会话的工作流。如果是这样,您需要将工作流实例ID存储在可以访问它的位置。因此,将其放入cookie或会话对象中。我更喜欢cookie,因为它即使在会话超时或AppDomain被IIS回收时也能工作

接下来,需要获取对ExternalDataExchange服务的引用。如果您有对Workfow运行时的引用,那么这很容易。您只需要workflowRuntime.GetService()。接下来,使用该服务引发将消息发送到工作流的事件

Protected Sub btnReception_Click(ByVal sender As Object, ByVal e As System.EventArgs)             
      Handles btnReception.Click
        ...
End Sub