Рабочий процесс прерван - PullRequest
       22

Рабочий процесс прерван

0 голосов
/ 22 августа 2011

Я работаю над приложением Asp .net и использую основу рабочего процесса Windows 4. Когда я прекращаю рабочий процесс, я хочу экспортировать причину с помощью следующего кода

     app.Aborted = delegate(WorkflowApplicationAbortedEventArgs o)
        {

            HttpContext.Current.Response.Write("Exception:" + o.Reason.GetType().FullName + o.Reason.Message);
            syncEvent.Set();
        };

Но я думаю, что это нене работает, потому что рабочий процесс не имеет HttpContext.Любые идеи, как я могу экспортировать его?

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

Проблема в том, что HttpContext.Current является статическим полем потока, ограниченным текущим потоком, выполняющим запрос ASP.NET, в то время как WorkflowApplication запускает рабочий процесс и обратные вызовы в фоновом потоке ThreadPool.

Тот факт, что вы хотите записать ошибку обратно в поток ответов, предполагает, что вы работаете с коротким рабочим процессом здесь. В этом случае гораздо проще использовать WorkflowInvoker для запуска рабочего процесса, поскольку фоновые потоки не задействованы.

Если вы включите WorkflowApplication, то я предлагаю изучить свойство SynchronizationContext и установить, чтобы большинство обратных вызовов было возвращено обратно в исходный поток.

0 голосов
/ 22 августа 2011

Я думаю, что самый простой способ - это обернуть WorkflowApplication и HttpContext в один класс, например:


class WorkflowAppAdapter
    {
        private HttpContext m_Context;
        private WorkflowApplication m_WorkflowApp;

        public WorkflowAppAdapter(WorkflowApplication app, HttpContext context)
        {
            m_Context = context;
            m_WorkflowApp = app;

            app.Completed =
                (e) =>
                {
                    Debug.WriteLine(m_Context.Request.Browser.Browser);

                };
        }

        public void Run()
        {
            m_WorkflowApp.Run();
        }
    }
...