在BizTalk Orchestration中调用没有输入参数的WCF服务

时间:2012-01-27 00:54:48

标签: wcf biztalk biztalk-2010

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

请忽略First Receive_1和Last Send_1形状,因为我刚刚用它们来开始这个编排。我的业务流程看起来像:

enter image description here

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

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

public class CalculatorService : ICalculator
{

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

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

enter image description here

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

enter image description here

现在,我已经阅读了所有我需要构建InputMessage以便调用没有参数的Web服务。

有些论坛/网站说我需要简单地创建一个空白的ConstructMessage形状,其MessageType为dateRequest Message。虽然这样做项目不编译,但我收到以下错误消息:

enter image description here

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,Version = 3.0.1.0,Culture = neutral,   PublicKeyToken = 31bf3856ad364e35“来源:”XML汇编程序“发送端口:   “REDACTED_1.0.0.0_REDACTED.ExportData_WCFPort_dace989afd9cd9c5”   URI:“http://localhost/COMPANYNAME/WCFService/Service.svc”原因:这个   汇编程序无法使用此类型检索文档规范:   “GetLastExecutionDate”。

传递给服务的参数数据是:

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

3 个答案:

答案 0 :(得分:1)

从visual studio中转到服务请求消息架构文件。

右键单击 - &gt;生成实例。

抓取生成的XML实例,并用单引号替换所有双引号。

然后将其粘贴到作业

中的LoadXml()中

enter image description here

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

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

但好消息是在这种情况下不需要XMLTransmit管道。只需将send-pipeline更改为PassThruTransmit,它最有可能解决至少这个问题。