#windows #workflow #toolbox
#Windows #рабочий процесс #Набор инструментов
Вопрос:
Я создал простое приложение-службу рабочего процесса (WF1), затем я добавил в свое решение клиент Windows form с другим действием рабочего процесса (WF2) внутри. Затем я добавил соответствующую ссылку на службу в WF1. Когда я пытаюсь использовать свою ссылку на службу, чтобы добавить вызов сообщения из WF2 (Windows forms) в WF1 (приложение workflow service) … в toolbox нет никаких элементов, представляющих мою ссылку на службу WF1! Она отсутствует. Не повезло, пытаясь добавить его… Я заблудился. Есть идеи?
Комментарии:
1. Нужно попробовать «Выбрать элементы …», щелкнув правой кнопкой мыши на панели инструментов и просмотрев, чтобы найти WF1?
2. Да, когда я выбираю сборку, она сообщает мне, что она недействительна.
3. Не могли бы вы немного лучше объяснить, что вы пытаетесь сделать? Я понимаю, что вы хотите создать WorkflowServices, но я не понимаю, почему вы хотите использовать WorkflowService в качестве действия в другом рабочем процессе. Вы хотите протестировать свой WorkflowService? Вместо того, чтобы использовать его как действие, не было бы лучше, если бы вы добавили ссылку на службу в свой клиент WinForm и использовали WorkflowService как службу WCF? Я просто предполагаю, что это то, что вам нужно сделать.
4. Мне нужно получить доступ к рабочему процессу (части приложения службы рабочего процесса) из ДРУГОГО действия рабочего процесса, поставляемого с приложением Windows form. Просто используйте его для выполнения какого-либо повторного использования кода.
5. Я видел примеры кода, которые работают таким образом, единственное отличие заключается в том, что клиентское приложение является приложением рабочего процесса консоли. Это как-то связано? Спасибо!
Ответ №1:
После просмотра видео и на основании вашего второго комментария выше я считаю, что нет необходимости пытаться использовать WorkflowService в качестве действия внутри другого рабочего процесса, так же, как показано на видео. Поймите, что в видео он вызывает только одну из сервисных операций. Проект шаблона консоли рабочего процесса позволяет вызывать операцию службы таким простым способом, заключая операцию в действие, тем самым освобождая вас от необходимости создавать экземпляр прокси-клиента. Существуют и другие способы достижения того же результата.
Что бы я сделал: добавьте ссылку на службу в вашем клиенте WinForms в WorkflowServiceApp, WF1 (вы уже это сделали). Внутри второго рабочего процесса (WF2) создайте экземпляр прокси-сервера типа WF1 и вызывайте операции, которые предоставляет служба напрямую, как вы бы вызывали любую обычную операцию службы, если бы вы не находились внутри рабочего процесса. В основном он использует службу WCF. Одним из вариантов будет создание переменной типа вашей службы, создание экземпляра новой ссылки, например, в операции Assign, создание переменной типа результата службы и, наконец, вызов службы либо в другой операции Assign, либо в invokeMethod .
Сначала назначьте действие:
proxy = New WF1Client() //That has to be the name of you client as created by the Service Reference
Второе действие назначения:
Result = proxy.MyMethod(...) //The call to the operation. You would have to create the variables to hold the result and any input parameters you wish to pass to the operation.
Это было бы просто. Вам не нужно будет использовать саму службу в качестве действия.
Если вам все еще нужно сделать это одним действием для использования внутри конструктора или совместного использования с другими рабочими процессами, создайте действие Code, выполните вызов операции service в нем (создание экземпляра прокси, настройка входных данных и т. Д.), скомпилируйте, И ваше действие code появится в панели инструментов, Чтобы вы могли использоватьэто в WF2. Кроме того, если вы создаете ClassLibrary и реализуете свои действия, либо те, которые поставляются с WF, либо пользовательские действия, вы можете повторно использовать их в разных проектах workflow, ссылаясь на ClassLibrary. Если у вас есть контроль над разработкой WF1, вы можете использовать этот подход для повторного использования ваших действий.
Надеюсь, это поможет.
Комментарии:
1. Большое вам спасибо за этот ответ! Я также могу использовать действия обмена сообщениями, поставляемые с VS2010, и вызывать службу как любую другую веб-службу, верно?
2. ДА. Действия обмена сообщениями позволяют предоставлять рабочий процесс как службу WCF. Действие приема похоже на контракт на обслуживание WCF с операцией обслуживания ( 1 ), поэтому превращение WorkflowService в службу WCF, которую вы можете использовать как любую другую обычную службу WCF.