1

「生成されたアイテムを追加 -> WCF サービスを使用」というウィザードを使用して、Biztalk で WCF サービスを使用しています。

私が抱えている問題は、サービスが解析できない応答を返していることです: 理由: 着信ドキュメントの解析中にエラーが発生しました: 「複数のルート要素があります。1 行目、位置 296。」

自動生成されたスキーマを使用しているので、これは驚くべきことです

しかし、サービスが期待される操作を行うため、エラーメッセージではありません。問題は multiRef タグに関係していると思います

応答:

<ns1:sendSmsSubmissionResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://mobicomp.com/smsexpress/webservice/server/message">
    <sendSmsSubmissionReturn href="#id0" /> 
</ns1:sendSmsSubmissionResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:SubmissionStatus" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://mobicomp.com/smsexpress/webservice/server/message">
    <id xsi:type="soapenc:string">4336723</id> 
    <message xsi:type="soapenc:string">Submissão enviada para processamento.</message> 
    <status href="#id1" /> 
</multiRef>
<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef> 

スキーマ

<xs:schema xmlns:tns="http://mobicomp.com/smsexpress/webservice/server/message" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://mobicomp.com/smsexpress/webservice/server/message" id="sendSmsSubmissionResponse" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation=".\SubmissionManagerService_mobicomp_com_smsexpress_webservice_server_message.xsd" /> 
    <xs:annotation>
        <xs:appinfo>
            <schemaInfo root_reference="sendSmsSubmissionResponse" xmlns="http://schemas.microsoft.com/BizTalk/2003" /> 
            <b:references>
                <b:reference targetNamespace="http://common.server.webservice.smsexpress.mobicomp.com" /> 
                <b:reference targetNamespace="http://mobicomp.com/smsexpress/webservice/server/message" /> 
                <b:reference targetNamespace="http://schemas.xmlsoap.org/soap/encoding/" /> 
            </b:references>
        </xs:appinfo>
    </xs:annotation>
    <xs:element name="sendSmsSubmissionResponse">
        <xs:annotation>
            <xs:documentation>Wrapper element for message "sendSmsSubmissionResponse" of RPC operation "sendSmsSubmission".</xs:documentation> 
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="sendSmsSubmissionReturn" type="tns:SubmissionStatus" /> 
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

このエラーが発生しないようにするにはどうすればよいですか?

ありがとう!

編集:

スキーマでルート参照を「sendSmsSubmissionResponse」に指定しても問題は解決しませんでした

4

2 に答える 2

4

わかりました私はそれを解決しました

誰かが同じ問題に遭遇した場合に備えて、書き留めておきます

次のカスタム受信パイプラインを作成しました。

デコードし、最初に XML を標準の onw で XSL Dissassemble を使用して変換し、SOAP エンベロープを削除して本体のみを残します

次に、biztalk が XML メッセージを受け入れ、通常どおり続行します

私が使用した XSL は、ここで見つけたものですが、微調整したものです。

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" >

<xsl:key name="multiref-by-id" match="multiRef" use="@id"/>

<xsl:template match="/">
    <xsl:copy>
        <xsl:apply-templates select="@*|*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="*[starts-with(@href, '#')]">
    <xsl:copy>
        <xsl:apply-templates select="@* |
         key('multiref-by-id', substring-after(@href, '#'))/@*[not(local-name()='id' or local-name()='type')] |
        key('multiref-by-id', substring-after(@href, '#'))/node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@href[starts-with(., '#')] | multiRef[@id] | @soapenc:root"/>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

于 2011-11-18T15:45:06.903 に答える
0

BizTalk メッセージ処理で使用できるルート要素は 1 つだけです。これを行うには複数の方法がありますが、基本的には、メッセージ内で繰り返される各ルートをデバッチして個別に処理できるようにするか、ラッパー要素を作成して処理できるようにする必要があります。このタイプのコンポーネントは、パイプライン ステージ (カスタム パイプライン) に存在する必要があります。

メッセージを XML として扱い、サイズやインデックスが必要かどうかに応じて解析することもできます。

于 2011-10-26T14:40:35.093 に答える