我如何手动为WF4(xamlX)服务创建客户端代理

我通过将WorkflowServiceHost包装在WCF服务中创建了多个服务; 使用WorkflowHostingEndpoint。 这样做,我能够定义我的服务合同,并创建代理类来连接到这些服务。

我现在正在创建一个服务,在该服务中我想使用WF4消息传递活动并再次自行承载该服务。 我也真的想手动创建我的代理类,而不使用VS2010或ServiceUtil中的ServiceReference ...

我已经看到了一些使用服务客户端中的发送活动的引用,但是我希望能够像使用其他服务一样,直接使用与服务合同直接创建的更多“类似WCF”的代理。 我怎样才能做到这一点? xamlX(或带有消息传递活动的xaml)中是否存在可以手动生成代理的界面合同?

注意:我不想使用WF_WCF_Samples中所述的发送活动。

更新:我试图在发布这个问题之前创建一个与工作流接收活动相同的接口; 但我不断收到以下错误:

由于EndpointDispatcher中的ContractFilter不匹配,Action'http://tempuri.org/ISvrClientService/Create'中的消息无法在接收方处理。 这可能是因为合同不匹配(发件人和收件人之间的操作不匹配)或发件人和收件人之间的绑定/安全性不匹配。 检查发件人和收件人是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)。

谢谢!


没有必要使用发送活动。 当您承载一个工作流程服务时,您将托管一个SOAP端点,唯一的区别是实现,但这是一个私人细节。 您可以像使用任何其他WCF服务一样使用ChannelFactory创建代理对象。

var factory = new ChannelFactory<IYourService>();
var proxy = factory.CreateChannel();

IYourService界面是你必须手工制作的。 服务器上没有一个,它是在一个工作流中完成的,所以你必须编码相同的合同。


我已经通过渠道工厂和手动创建的界面成功完成了此任务。 诀窍在于匹配回复/发送/输出参数名称,而不仅仅是输入签名。

如果您的工作流中具有相关性的书签,这一点尤其重要。

链接地址: http://www.djcxy.com/p/95851.html

上一篇: How can I Manually create a client proxy for a WF4 (xamlX) Service

下一篇: Multiple WCF requests against single Workflow instance