【发布时间】:2011-02-04 20:03:07
【问题描述】:
我很难找到明确引导您设置可调用外部 Web 服务的 WF4 工作流活动的资源或在线教程。我遇到的所有视频和在线示例都只是演示了如何使用作为 Visual Studio 解决方案一部分的 Web 服务,但我的情况需要调用非 Microsoft 服务器上的 Web 服务。
我在我的 VS2010 工作流控制台项目中添加了一个服务引用,用于相关 Web 服务,它指向外部 Web 服务的 WSDL。到目前为止,一切都很好(我认为)。我有一个非常基本的工作流程序列,使用 SendAndReceiveReply 工作流程控件与外部服务器进行通信,并且我相信我已经正确配置了 Send 部分。但是,ReceiveReplyForSend 给我带来了麻烦,我不确定我的 Content 选项是否设置正确。我正在调用一个名为 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 日更新:莫里斯的最新提示成功了!我需要为 Send 工作流活动的 ServiceContractName 属性添加适当的命名空间。
【问题讨论】:
标签: visual-studio-2010 workflow-foundation-4