Похоже, у меня есть рабочее решение для этого.
По сути, мой WorkflowRuntimeManager более или менее совпадает с представленным Брюсом Буковичем в его книге Pro WF Windows Workflow в .NET 3.5.
Я закончил тем, что создал новый сервис и добавил его во время выполнения рабочего процесса. Этот сервис позволяет моему рабочему процессу инициировать событие в моем приложении, которое позволяет ему передавать любой IDictionary обратно в мое хост-приложение.
Это событие, в свою очередь, выбирается WorkflowRuntimeManager, где оно затем, в свою очередь, берет результаты и связывает их с соответствующим WorkflowInstance и где оно становится доступным для самого приложения после возврата метода Workflow.
Я прикрепил здесь реализацию сервиса для всех, кто хочет дублировать эту функцию. Или даже лучше, если кто-то может найти лучший способ сделать это, пожалуйста, дайте мне знать.
public interface ISendDataService
{
event EventHandler<ReceivedDataEventArgs> ReceivedDataEvent;
void SendData(Guid instanceId, IDictionary<string, object> data);
}
public class SendDataService : ISendDataService
{
public event EventHandler<ReceivedDataEventArgs> ReceivedDataEvent;
private void OnReceivedDataEvent(Guid instanceId, IDictionary<string, object> data)
{
if (ReceivedDataEvent != null)
ReceivedDataEvent(null, new ReceivedDataEventArgs(instanceId, data));
}
public void SendData(Guid instanceId, IDictionary<string, object> data)
{
OnReceivedDataEvent(instanceId, data);
}
}
public class ReceivedDataEventArgs : EventArgs
{
public ReceivedDataEventArgs()
{
}
public ReceivedDataEventArgs(Guid instanceId, IDictionary<string, object> data)
{
InstanceId = instanceId;
Data = data;
}
public Guid InstanceId { get; set; }
public IDictionary<string, object> Data { get; set; }
}