我很难找到资源或在线教程,明确指导您设置可以调用外部Web服务的WF4工作流活动。我遇到的所有视频和在线示例都演示了如何使用属于Visual Studio解决方案的Web服务,但我的情况需要调用非Microsoft服务器上的Web服务。
我有一个服务引用添加到我的VS2010工作流控制台项目中,用于相关的Web服务,它指向外部Web服务的WSDL。到目前为止,这么好(我想)。我有一个非常基本的工作流程序列,使用 SendAndReceiveReply 工作流控制与外部服务器通信,我相信我已正确配置发送部分。然而, ReceiveReplyForSend 给我带来了麻烦,我不确定我的内容选项是否设置正确。我正在调用一个名为 FileCheck 的操作,目前出于测试目的总是返回值1,如下所示:
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<FileCheckResponse>
<FileCheckResult>1</FileCheckResult>
</FileCheckResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但是,如果我尝试运行此命令,则会收到错误“错误形成的SOAP消息”。对于它的价值,我的ReceiveReplyForSend有一个名为 FileCheckResult 的参数设置,但我不知道这是否是获得上述值的正确方法。
我可以在任一活动中放置一个断点,但我不知道如何在那一点看到SOAP调用的样子。有人可以给我一些工作流程发送/回复调试技巧或指向我如何在WF4中使用外部Web服务的优秀分步教程?
2011年2月2日更新:感谢Maurice的建议,我确切地看到了现在的失败。我的工作流中的Web服务调用失败,因为Visual Studio在我的工作流发送调用中生成对错误命名空间的引用。以下是SOAP消息中错误的XML的一点 - 我将省略SOAP信封的其余内容以获得简洁:
<FileCheck xmlns="http://tempuri.org/">
这是WCF测试客户端生成的内容,它会获得成功的消息:
<FileCheck xmlns="http://someserver.org/test/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
这可能是一个非常新手的问题,但有一个我忽略的设置可以调整 xmlns 值吗?我尝试在我的项目中搜索“tempuri”,但它无处可寻,所以我打赌我忽略了默认设置。
2011年2月8日更新:Maurice的最新提示就是诀窍!我需要为发送工作流活动的 ServiceContractName 属性添加适当的命名空间。
答案 0 :(得分:2)
添加对外部Web服务的引用并不比同一VS2010解决方案中的引用更难。只有在这种情况下,您才需要提供VS2010可以找到Web服务WSDL的URL。由于通信机制是标准的WSDL和SOAP,因此在调用其他服务时应该没有问题。
如果要调试消息,最好使用的工具是Fiddler。它可以让你在线上看到消息,甚至可以动态构建请求。如果您有一个可以使用该服务的现有客户端,您可以监视其消息并将其与您发送的消息进行比较。如果服务不使用复杂和自定义数据类型,则WCF测试客户端是检查服务是否响应标准.NET客户端应用程序的好方法。
SOAP namepsace是ServiceContractName的一部分。使用以下语法
{http://someserver.org/test/}的FileService