BizTalk Server 2013 - 对ASMX的Web引用 - BizTalk表达式编辑器中的响应中的元素

时间:2014-12-29 22:19:30

标签: visual-studio-2013 asmx biztalk biztalk-2013 biztalk-orchestrations

我正在BTS 2013中导入和重新编译BTS 2009项目,以保持在Microsoft支持生命周期内。

这是由前开发人员在Windows XP上首先使用BTS 2009,Visual Studio 2008开发的,后来转移到Windows 7.编译后的解决方案部署在Windows 2008 R2服务器中。在本练习中,我使用Visual Studio 2013,Windows 7上的BizTalk Server 2013以及最新的Service Pack。

该解决方案有四个项目 - 一个用于模式,地图,管道和编排。

架构项目引用.ASMX Web服务,作为“Web引用”(不是服务引用)。 ASMX的Response XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GenerateSalesIDResponse xmlns="http://Company.Integration.SalesIDGenerator/">
      <GenerateSalesIDResult>
        <SalesID>string</SalesRefID>
        <SalesIDInASCII>string</SalesRefIDInASCII>
        <IsError>boolean</IsError>
        <ErrorMessage>string</ErrorMessage>
        <StackTrace>string</StackTrace>
      </GenerateSalesIDResult>
    </GenerateSalesIDResponse>
  </soap12:Body>
</soap12:Envelope>

在其中一个业务流程中,有一个消息分配形状,其表达式如下:

Msg_OrderOutputForHTML.Exception = Msg_SalesRefIDResponse.GenerateSalesIDResult.ErrorMessage;
Msg_OrderOutputForHTML.StackTrace = Msg_SalesRefIDResponse.GenerateSalesIDResult.StackTrace;

我面前的问题是,上面XML中的元素ErrorMessageStackTrace及其所有兄弟元素都不适用于BizTalk Expression编辑器。对于之后的任何XML元素,Intellisense最多只能GenerateSalesIDResult,但之后不会。

错误消息为 - identifier 'StackTrace' does not exist in 'Msg_SalesIDReponse.GenerateSalesIDResult'; are you missing an assembly reference?

我该怎么做才能解决这个问题?请帮忙。

注意 - 我知道不再推荐ASMX,但是将其更改为等效的WCF服务需要我做很多非技术工作:-)

更新1:

Reference.xsd如下所示:

<?xml version="1.0"?>
<xs:schema xmlns:tns="http://Company.Integration.SalesIDGenerator/" elementFormDefault="qualified" targetNamespace="http://Company.Integration.SalesIDGenerator/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="SalesIDGen" nillable="true" type="tns:SalesIDGen" />
  <xs:complexType name="SalesIDGen">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="SalesID" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="SalesIDInASCII" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="IsError" type="xs:boolean" />
      <xs:element minOccurs="0" maxOccurs="1" name="ErrorMessage" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="StackTrace" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

更新2: 如果我在VS2008中打开,同样的项目没有这个问题。

1 个答案:

答案 0 :(得分:1)

消息是强类型的,似乎未正确生成模式的类,因此无法识别子节点。为Web引用生成的模式是什么样的?

Reference.xsd

您可以尝试更新Web引用并重建项目。同时关闭并重新打开Visual Studio。

<强>更新

有关在业务流程中访问消息内容的其他方式,请查看https://code.msdn.microsoft.com/windowsdesktop/BizTalk-Accessing-and-0cd434f7

您可以尝试使用XPath表达式来获取邮件内容。

所以

Msg_OrderOutputForHTML.Exception = Msg_SalesRefIDResponse.GenerateSalesIDResult.ErrorMessage;

会是这样的

Msg_OrderOutputForHTML.Exception = xpath(msgOutput3,"string(/*[local-name()='GenerateSalesIDResponse' and namespace-uri()='http://Company.Integration.SalesIDGenerator/']/*[local-name()='GenerateSalesIDResult']/*[local-name()='ErrorMessage'])")