我通过将WorkflowServiceHost包装在WCF服务中来创建了几个服务;使用WorkflowHostingEndpoint。这样做我就能够定义我的服务合同并创建代理类来连接这些服务。
我现在正在创建一项服务,我想在其中使用WF4消息传递活动并再次自我托管服务。我还真的想在不使用VS2010或ServiceUtil中的ServiceReference的情况下手动创建代理类...
我见过一些使用Service客户端发送活动的引用但我希望能够使用一个更像“WCF”的代理,直接针对服务合同创建,就像我对其他人一样服务。我怎样才能做到这一点?有没有xamlX(或带有消息传递活动的xaml)存储我可以用来手动生成代理的接口契约?
注意:我不想使用WF_WCF_Samples中描述的发送活动。
更新: 在发布此问题之前,我尝试创建与工作流接收活动相同的界面;但我不断收到以下错误:
行动'http://tempuri.org/ISvrClientService/Create'的消息 由于ContractFilter不匹配,无法在接收方处理 在EndpointDispatcher。这可能是因为合同 不匹配(发送者和接收者之间的不匹配行为)或a 发送方和接收方之间的绑定/安全性不匹配。校验 发件人和收件人具有相同的合同和相同的约束力 (包括安全要求,例如消息,传输,无)。
谢谢!
答案 0 :(得分:1)
无需使用发送活动。当您托管工作流服务时,您正在托管SOAP端点,唯一的区别是实现,但这是一个私有细节。您可以使用ChannelFactory创建代理对象,就像使用任何其他WCF服务一样。
var factory = new ChannelFactory<IYourService>();
var proxy = factory.CreateChannel();
IYourService界面是你需要手工制作的东西。服务器上没有一个,它是在工作流程中完成的,因此您必须编写相同的合同。
答案 1 :(得分:1)
我已经成功完成了通道工厂和手动创建的接口。诀窍在于匹配回复/发送/输出参数名称而不仅仅是类型签名。
如果您的工作流程中有相关的书签,这一点尤其重要。