【问题标题】:WF4 - How to consume external web service?WF4 - 如何使用外部 Web 服务?
【发布时间】: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


    【解决方案1】:

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

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

    SOAP 命名空间是 ServiceContractName 的一部分。使用以下语法

    {http://someserver.org/test/}文件服务

    【讨论】:

    • 谢谢,莫里斯!这有很大帮助。我之前能够毫无问题地添加对外部服务的服务引用,但是同时使用 Fiddler 和 WCF 测试客户端,我现在可以看到我的 Web 服务调用失败,因为我在 Visual Studio 中的工作流没有生成对正确的命名空间。有关更多详细信息,请参阅上面的更新。
    • 查看底部的示例语法。如果没有指定命名空间,tempuri.org 是默认值。
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2012-05-16
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多