如何使用外部Web服务?

我非常难以找到一个资源或在线教程,明确指导您设置一个可以呼叫外部Web服务的WF4工作流活动。 我遇到的所有视频和在线示例都只是演示了如何使用作为Visual Studio解决方案一部分的Web服务,但是我的情况需要在非Microsoft服务器上调用Web服务。

我有一个服务引用添加到我的VS2010工作流控制台项目中,用于所讨论的Web服务,它指向外部Web服务的WSDL。 到目前为止,这么好(我认为)。 我有一个非常基本的工作流程序,使用SendAndReceiveReply工作流控件与外部服务器进行通信,并且我相信我的Send部分配置正确。 然而, 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属性中。


添加对外部Web服务的引用并不比VS2010解决方案的一部分更难。 只有在这种情况下,您需要提供VS2010可以找到Web服务WSDL的URL。 由于通信机制是标准的WSDL和SOAP,所以在调用其他服务时不应该存在问题。

如果你想调试消息,最好使用的工具是Fiddler。 它可以让你在线上看到消息,甚至可以立即建立请求。 如果您有一个可以使用相关服务的现有客户端,则可以监控其消息并将其与您发送的消息进行比较。 如果该服务不使用复杂和自定义数据类型,则WCF测试客户端是一种检查服务是否响应标准.NET客户端应用程序的好方法。

SOAP namepsace是ServiceContractName的一部分。 使用以下语法

{http://someserver.org/test/}FileService

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

上一篇: How to consume external web service?

下一篇: How to Invoke a WF3.5 WorkFlow from a WF4 Workflow