簡體   English   中英

WCF XML反序列化失敗

[英]WCF XML deserialization fail

我有這個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>

我已經檢索到WSDL,並且響應消息名稱與上面的內容不匹配。 wsdl中有pobierz_kategorieResponsepobierz_kategorie_wyjscie ,WSDL定義中就是pobierz_kategorie_wyjscie

留言 ...

  <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客戶端代碼)來處理soap數組。 我自己還沒有做過,但是有一篇SO文章:-
.NET為什么不從Web服務反序列化我的原始數組?
我不確定100%是否與您遇到的問題相同。 看來您需要明確地告訴WCF-對於此元素,這就是您對數組進行反序列化的方式。 抱歉,我沒有更多幫助。

編輯#2
發布給您“肥皂測試”的wsdl與實際實現之間不匹配。 注意名稱空間。 或者,您已經生成了測試wsdl端點的代碼並將其指向prod端點。請參見下面的名稱空間。
您請求的名稱空間如下所示:

但是響應的名稱空間看起來像這樣:

那是行不通的!

嘗試關閉您的WCF客戶端

而不是關閉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM