BizTalk Server 2013 - веб-ссылка на ASMX - элементы в ответе недоступны в редакторе выражений BizTalk

Я нахожусь в процессе импорта и перекомпиляции проекта BTS 2009 в BTS 2013, чтобы оставаться в рамках жизненного цикла поддержки Microsoft.

Это было разработано бывшими разработчиками, использующими BTS 2009, Visual Studio 2008 сначала на Windows XP, а затем перенесено на Windows 7. Скомпилированное решение развертывается на сервере Windows 2008 R2. Для этого упражнения я использую Visual Studio 2013, BizTalk Server 2013 в Windows 7 с последними пакетами обновления.

В решении есть четыре проекта - по одному для схем, карт, конвейеров и оркестровок.

Проект схемы ссылается на веб-службу .ASMX как на «веб-ссылку» (а не на ссылку на службу). XML ответа ASMX выглядит так:

<?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;

Проблема, стоящая передо мной, заключается в том, что элементы ErrorMessage, StackTrace и все их родственные элементы в приведенном выше XML недоступны для редактора BizTalk Expression. Intellisense работает до GenerateSalesIDResult, но не после этого, для любого из последующих элементов XML.

Сообщение об ошибке - 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, не имеет этой проблемы.


person FMFF    schedule 29.12.2014    source источник


Ответы (1)


Сообщение строго типизировано, и кажется, что класс схемы не был правильно сгенерирован, следовательно, дочерние узлы не распознаются. Как выглядит схема, созданная для веб-ссылки?

Reference.xsd

Вы можете попробовать обновить веб-ссылку и пересобрать проект. Также закрытие и повторное открытие Visual Studio.

Обновление:

Чтобы узнать о других способах доступа к содержимому сообщения внутри оркестровки, посмотрите https://code.msdn.microsoft.com/windowsdesktop/BizTalk-Accessing-and-0cd434f7

Вы можете попробовать использовать выражения XPath для получения содержимого сообщения.

So

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'])")
person Gruff    schedule 30.12.2014
comment
Спасибо @Gruff. Я добавил содержимое Reference.xsd в обновлении к исходному вопросу. Я удалил и повторно добавил веб-ссылку, закрыл и снова открыл VS2013, очистил решение и проект. Ошибка остается после всего этого. - person FMFF; 30.12.2014
comment
К сожалению, я еще не использовал VS2013 для разработки BizTalk. Можете ли вы подтвердить, что генератор веб-ссылок создает файл Reference.map.cs, а элементы, к которым вы пытаетесь получить доступ, отмечены знаком DistinguishedFieldAttribute? Я обновил ответ, добавив другие способы доступа к содержанию сообщения для вашего прочтения. - person Gruff; 31.12.2014
comment
Да, я вижу в файле Reference.map.cs есть public partial class со всеми элементами, отмеченными Microsoft.XLANGs.BaseTypes.DistinguishedFieldAttribute() - person FMFF; 02.01.2015