1

我正在尝试调用 IIS 托管的 WCF Web 服务,该服务仅从 BizTalk 业务流程返回当前日期。此服务没有输入参数。

请忽略 First Receive_1 和 Last Send_1 形状,因为我刚刚使用它们开始了此编排。我的编排看起来像:

在此处输入图像描述

我使用“添加生成的项目...”向导将生成的引用添加到编排中的 Web 服务。我的 Web 服务定义如下所示:

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    DateTime GetLastExecutionDate();
}

public class CalculatorService : ICalculator
{

    public DateTime GetLastExecutionDate()
    {
        return DateTime.Now.AddMonths(-6);
    }
}

在我将生成的引用添加到 BizTalk 项目后,向导创建了一组端口和多部分消息,如下所示:

在此处输入图像描述

我还创建了本地消息来在这些调用之间传输数据,如下所示:

在此处输入图像描述

现在,我已经阅读了我可能需要构造 InputMessage 以调用不带参数的 Web 服务的所有内容。

一些论坛/网站说我需要使用 dateRequest 消息的 MessageType 简单地创建一个空白的 ConstructMessage 形状。这样做时,项目无法编译,我收到以下错误消息:

在此处输入图像描述

另一个建议的项目是为空白文档执行 MessageAssignment。因此,我的 Orchestration 中的 MessageAssginment 形状具有以下内容:

xDoc = new System.Xml.XmlDocument();
xDoc.LoadXml("<GetLastExecutionDate/>");
dateRequest.parameters = xDoc;

虽然这会编译并部署,但我的 BizTalk 实例会暂停,但出现以下异常:

执行发送管道失败:“Microsoft.BizTalk.DefaultPipelines.XMLTransmit,Microsoft.BizTalk.DefaultPipelines,版本 = 3.0.1.0,文化 = 中性,PublicKeyToken = 31bf3856ad364e35”源:“XML 汇编程序”发送端口:“REDACTED_1。 0.0.0_REDACTED.ExportData_WCFPort_dace989afd9cd9c5" URI:" http://localhost/COMPANYNAME/WCFService/Service.svc " 原因:此汇编程序无法使用此类型检索文档规范:"GetLastExecutionDate"。

而传入服务的参数数据为:

所以我的问题是:如何调用不需要任何输入参数的 WCF 服务。

4

3 回答 3

1

从 Visual Studio 中转到您的服务请求消息架构文件。

右键单击-> 生成实例。

获取生成的 XML 实例并将所有双引号替换为单引号。

然后将其粘贴到您的作业中的 LoadXml()

在此处输入图像描述

于 2012-01-27T10:50:12.227 回答
0

您使用 XMLTransmit 管道,它可能有多个根本原因引发错误消息

“原因:此汇编器无法使用此类型检索文档规范:xxx”

最可能的原因是您没有部署与您正在传输的消息匹配的模式。

但好消息是在这种情况下不需要 XMLTransmit 管道。只需将发送管道更改为 PassThruTransmit,它很可能至少可以解决该问题。

于 2013-09-11T12:47:22.737 回答
0

您可能需要在消息分配形状中使用的字符串中使用 XML 命名空间。我建议您根据 Web 服务模式验证您的 XML 字符串,以确保它发出有效的消息。

您还可以使用 xsd.exe 从您的 Web 服务架构创建 .NET 类。

请参阅http://msdn.microsoft.com/en-us/library/aa547985(BTS.20).aspx以获取在业务流程中构建消息的方法的完整列表。

于 2012-01-27T09:26:29.953 回答