захват события веб-формы для рабочего процесса на сайте asp.net - PullRequest
0 голосов
/ 16 апреля 2009

Основная идея заключается в том, что у меня есть веб-сайт и рабочий процесс. Мне нужно захватывать нажатия кнопок со страниц aspx в моем рабочем процессе.

У меня есть решение с проектом worflow и проектом веб-сайта, а web.config и global.asax настроены для работы с WF. Постоянные службы также созданы.

Я создал рабочий процесс StateMachine. Существует несколько состояний (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

В моем form.aspx âge есть кнопка, а на странице form.aspx.vb есть соответствующий обработчик события:

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

Куда пойти отсюда?

1 Ответ

0 голосов
/ 16 апреля 2009

Я предполагаю, что вы запускаете рабочий процесс для каждой пользовательской сессии. Если это так, вам нужно где-то хранить экземпляр экземпляра рабочего процесса, к которому вы можете обратиться. Поэтому поместите его в файл cookie или в объект Session. Я предпочитаю cookie, потому что он работает, даже когда время сеанса истекает или домен приложений перезапускается IIS.

Далее вам нужно получить ссылку на службу ExternalDataExchange. Это легко, если у вас есть ссылка на среду выполнения worklfow. Все, что вам нужно, это workflowRuntime.GetService (). Затем вы используете сервис, чтобы вызвать событие, которое отправляет сообщение в ваш рабочий процесс.

...