0

私はこの WSDL を持っています (サービスは私のものではありません): http://soaptest.webapi-beta.gratka.pl/dom.html?wsdl

メソッド「pobierz_kategorie」から応答を受け取ると、そのような例外が発生します

CommunicationException 操作 'pobierz_kategorie' の応答メッセージの本文のデシリアライズ中にエラーが発生しました。{"XML ドキュメントにエラーがあります (2, 501)。"} {"指定された型が認識されませんでした: name='kategoria_drzewo', namespace='http://soap.webapi-beta.gratka.pl/dom .html'、."}

WSDL や WCF の構成、または生成されたプロキシを変更して機能させる方法をお聞きしたいと思います。PHPを使用してそのメソッドを呼び出すと機能するので、XMLSerializerの問題であるに違いないと思います。

これは私が得る応答メッセージです:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soap.webapi-beta.gratka.pl/dom.html" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:pobierz_kategorieResponse>
            <drzewo_kategorii SOAP-ENC:arrayType="ns1:kategoria_drzewo[48]" xsi:type="ns1:drzewo_kategorii">
                <item xsi:type="ns1:kategoria_drzewo">
                    <id xsi:type="xsd:int">382</id>
                    <nazwa xsi:type="xsd:string">Dom</nazwa>
                    <dane xsi:type="xsd:string">0</dane>
                    <id_rodzic xsi:type="xsd:int">1</id_rodzic>
                    <poziom xsi:type="xsd:int">0</poziom>
                    <id_prasa xsi:type="xsd:int">2</id_prasa>
                </item>
                <item xsi:type="ns1:kategoria_drzewo">
                    <id xsi:type="xsd:int">8251</id>
                    <nazwa xsi:type="xsd:string">Pokoje</nazwa>
                    <dane xsi:type="xsd:string"/>
                    <id_rodzic xsi:type="xsd:int">382</id_rodzic>
                    <poziom xsi:type="xsd:int">1</poziom>
                    <id_prasa xsi:type="xsd:int">0</id_prasa>
                </item>
            </drzewo_kategorii>
        </ns1:pobierz_kategorieResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

それがリクエストです:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q1="http://soaptest.webapi-beta.gratka.pl/dom.html">
    <s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <q1:pobierz_kategorie>
            <sesja xsi:type="xsd:string">ad9e730460e334b916c95533c8da320003ac7e14</sesja>
            <id_kategoria xsi:type="xsd:int">382</id_kategoria>
        </q1:pobierz_kategorie>
    </s:Body>
</s:Envelope>
4

1 に答える 1

1

その WSDL を取得しましたが、応答メッセージの名前が上記のものと一致しません。pobierz_kategorieResponsewsdl のどこにあるかはpobierz_kategorie_wyjscie、WSDL 定義にあります。

メッセージ...

  <message name="pobierz_kategorie_wyjscie">
    <part name="drzewo_kategorii" type="tns:drzewo_kategorii"/>
  </message>

操作...

<operation name="pobierz_kategorie">
  <input message="tns:pobierz_kategorie_wejscie"/>
  <output message="tns:pobierz_kategorie_wyjscie"/>
</operation>

サービス参照を再生成するか、別のエンドポイントを指す必要があるかもしれません。

編集

ソープ配列を処理するには、reference.cs ファイル (生成された WCF クライアント コード) をカスタマイズする必要がある場合があります。私はこれを自分で行ったことはありませんが、それに関する SO の記事があり
ます。
これがあなたが抱えている問題と同じかどうかは 100% わかりません。WCF に明示的に伝える必要があるようです。この要素については、配列を逆シリアル化する方法です。申し訳ありませんが、これ以上お役に立てません。

EDIT #2
「soaptest」に公開された wsdl と実際の実装との間に不一致があります。名前空間に注意してください。または、テスト wsdl エンドポイントのコードを生成し、それを prod エンドポイントに向けました。以下の名前空間を参照してください。
リクエストの名前空間は次のようになりました:-

しかし、応答の名前空間は次のようになりました:-

それはうまくいきません !

WCF クライアントを生成してみてください

オフの代わりに

于 2013-01-10T11:28:07.460 に答える