让我以让两个工作流彼此通信的尝试为例。
首先,您需要编写一个主机。这是一个非常复杂的命题,因为要使两个WF主机彼此通信,您还需要了解WCF和所有关于线程的模糊概念。
然后,您的WF将需要通过主机与其他WF进行通信。这是有意义的,因为当WF等待另一个WF发送事件时,它不会在内存中运行3个月。WF坐在数据库中,并且通过主机进行通信。
好吧,即使是更简单的情况,对于本地进程间通信,您也需要使用CallExternalMethod活动和HandleExternalEvent活动。即使在这种情况下,您也必须通过主机进行交谈,因为WF可能已被传递到数据库中。因此,为此,您必须记住做三件事:用ExternalDataExchangeAttribute装饰您的接口,eventargs需要从ExternalDataEventArgs派生,并且事件参数是可序列化的。
如果您在#3中的任何项目中出错,则会收到一个非常不直观的“InvalidOperationException”。当然,消息会说“服务未实现具有ExternalDataExchange属性的接口”,但直到您查看内部异常,才真正知道发生了什么-即您忘记了将其标记为可序列化。哎呀!但是我标记它为可序列化。实际上,所有内容都必须是可序列化的,甚至发送者也是如此。
然后,您必须通过正确的接口名称和用于通信的方法名称连接WF活动。
最后,即使在进程内WF通信中,您也必须记住将服务添加到ExternalDataExchangeService而不是WF运行时。否则,它看起来像没有人订阅该事件。更不用说,这是其中一个不会真正抛出错误的错误。即难以追踪!
因此,简而言之,在尝试使两个工作流通信的简单情况下,您需要很好地掌握以下内容:
*编写Windows应用程序(用于主机),
*线程,
*WCF,
*OOP概念,
*所有序列化概念,
*大量连接和WF本身的非直观细节,
*Ninja调试技巧。
来源:http://blah.winsmarts.com/2008-2-I've_been_here_before.aspx