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

时间:2012-02-14 18:30:51

标签: workflow-foundation-4

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

我现在正在创建一项服务,我想在其中使用WF4消息传递活动并再次自我托管服务。我还真的想在不使用VS2010或ServiceUtil中的ServiceReference的情况下手动创建代理类...

我见过一些使用Service客户端发送活动的引用但我希望能够使用一个更像“WCF”的代理,直接针对服务合同创建,就像我对其他人一样服务。我怎样才能做到这一点?有没有xamlX(或带有消息传递活动的xaml)存储我可以用来手动生成代理的接口契约?

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

更新: 在发布此问题之前,我尝试创建与工作流接收活动相同的界面;但我不断收到以下错误:

  

行动'http://tempuri.org/ISvrClientService/Create'的消息   由于ContractFilter不匹配,无法在接收方处理   在EndpointDispatcher。这可能是因为合同   不匹配(发送者和接收者之间的不匹配行为)或a   发送方和接收方之间的绑定/安全性不匹配。校验   发件人和收件人具有相同的合同和相同的约束力   (包括安全要求,例如消息,传输,无)。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

IYourService界面是你需要手工制作的东西。服务器上没有一个,它是在工作流程中完成的,因此您必须编写相同的合同。

答案 1 :(得分:1)

我已经成功完成了通道工厂和手动创建的接口。诀窍在于匹配回复/发送/输出参数名称而不仅仅是类型签名。

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

相关问题