【问题标题】:Calling WCF Service with no input parameters in BizTalk Orchestration在 BizTalk 业务流程中调用没有输入参数的 WCF 服务
【发布时间】:2012-02-20 02:40:01
【问题描述】:

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

请忽略 First Receive_1 和 Last Send_1 形状,因为我刚刚使用它们来开始此编排。我的编排如下所示:

我使用“添加生成的项目...”向导将生成的引用添加到编排中的 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 形状。这样做时项目无法编译,我收到以下错误消息:

other suggested item 是为空白文档执行 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 assembler" 发送端口: “REDACTED_1.0.0.0_REDACTED.ExportData_WCFPort_dace989afd9cd9c5” URI:“http://localhost/COMPANYNAME/WCFService/Service.svc”原因:这个 汇编器无法使用这种类型检索文档规范: "GetLastExecutionDate"。

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

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

【问题讨论】:

    标签: wcf biztalk biztalk-2010


    【解决方案1】:

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

    右键单击-> 生成实例。

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

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

    【讨论】:

      【解决方案2】:

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

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

      请参阅http://msdn.microsoft.com/en-us/library/aa547985(BTS.20).aspx,了解在编排中构建消息的完整方法列表。

      【讨论】:

        【解决方案3】:

        您使用 XMLTransmit 管道,可能有多个根本原因导致它抛出错误消息

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-12
          相关资源
          最近更新 更多