簡體   English   中英

Flex / AS3在一項特定操作上未完全解碼WSDL XML。 我到底該如何補救?

[英]Flex/AS3 incompletely decoding WSDL XML on one particular operation. How on earth do I remedy this?

我目前在Flex中使用WSDL,這是.NET服務的后端。 除了一個操作,由於某種奇怪的原因,AS3無法正確解析其結果對象,所有這些操作似乎都可以正常工作。 我已經檢查了Fiddler / Charles中的響應XML,並且數據在那里,但是Flex變量檢查器中的結果不是NOT。 罪魁禍首是子標簽“ DD”(result.data.result.Tables.DD.Columns),我只看到其中一個子標簽,它是17個子標簽子標簽,但它們被列為數組索引0-17,並帶有一個值“ RID”,“ NP”,“ LI”等等。 但是這些標簽沒有值。 我想我沒有得到任何<DD >標簽。

這是我的結果處理程序:

public function getLocationStats_result( result : Object ) : void
{
   trace("Location Stats Received");
   var locations : ArrayCollection = result.data.result.Tables.DD.Columns;

   sublocationCheck();
   for(var i: int =0; i < locations.length; i++)
   {
      //Setting up the info Dictionary, key= location name, value =  LocationInfo obj.
      model.pinLocations.sublocations.getItemAt(0).info[locations[i]]= new LocationInfo();
   } 
};  

這是WSDL響應的相關部分:

<GetLocationStatsResponse xmlns="http://tempuri.org/">
  <GetLocationStatsResult>
    <xs:schema id="Rpt_DSDashBoardFeed" targetNamespace="http://tempuri.org/Rpt_DSDashBoardFeed.xsd" xmlns:mstns="http://tempuri.org/Rpt_DSDashBoardFeed.xsd" xmlns="http://tempuri.org/Rpt_DSDashBoardFeed.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
      <xs:element name="Rpt_DSDashBoardFeed" msdata:IsDataSet="true">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded">
            <xs:element name="DD">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="RID" type="xs:decimal" minOccurs="0" />
                  <xs:element name="LP" type="xs:long" minOccurs="0" />
                  <xs:element name="NI" type="xs:long" minOccurs="0" />
                  <xs:element name="ENC" type="xs:long" minOccurs="0" />
                  <xs:element name="IMIN" type="xs:dateTime" minOccurs="0" />
                  <xs:element name="IMAX" type="xs:dateTime" minOccurs="0" />
                  <xs:element name="CC" type="xs:string" minOccurs="0" />
                  <xs:element name="LC" type="xs:string" minOccurs="0" />
                  <xs:element name="SLC" type="xs:string" minOccurs="0" />
                  <xs:element name="PC" type="xs:string" minOccurs="0" />
                  <xs:element name="CN" type="xs:string" minOccurs="0" />
                  <xs:element name="LN" type="xs:string" minOccurs="0" />
                  <xs:element name="SLN" type="xs:string" minOccurs="0" />
                  <xs:element name="PN" type="xs:string" minOccurs="0" />
                  <xs:element name="HW" type="xs:decimal" minOccurs="0" />
                  <xs:element name="TH" type="xs:decimal" minOccurs="0" />
                  <xs:element name="TE" type="xs:decimal" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
      <Rpt_DSDashBoardFeed xmlns="http://tempuri.org/Rpt_DSDashBoardFeed.xsd">
        <DD diffgr:id="DD1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
          <RID>21389325</RID>
          <LP>277467563</LP>
          <NI>1</NI>
          <ENC>1</ENC>
          <IMIN>2010-02-16T09:53:54.0000000-05:00</IMIN>
          <IMAX>2010-02-16T09:53:54.0000000-05:00</IMAX>
          <CC>WDWPR</CC>
          <LC>MK</LC>
          <SLC>ENTR</SLC>
          <PC>397850</PC>
          <CN>Some String</CN>
          <LN>Another String</LN>
          <SLN>Location</SLN>
          <PN>Eastman, Suzy</PN>
          <HW>0</HW>
          <TH>11</TH>
          <TE>30</TE>
        </DD>
        <DD diffgr:id="DD2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
          <RID>21389326</RID>
          <LP>277467508</LP>
          <NI>8</NI>
          <ENC>2</ENC>
          <IMIN>2010-02-16T09:53:42.0000000-05:00</IMIN>
          <IMAX>2010-02-16T09:55:16.0000000-05:00</IMAX>
          <CC>WDWPR</CC>
          <LC>MK</LC>
          <SLC>FMAIN</SLC>
          <PC>359800</PC>
          <CN>Some String</CN>
          <LN>Yet ANOTHER string</LN>
          <SLN>Some Info</SLN>
          <PN>Mays, Willie</PN>
          <HW>0</HW>
          <TH>11</TH>
          <TE>42</TE>
        </DD>

(被截斷了,后面跟着更多的DD標簽,還有關閉標簽。)我看到的只是帶有標簽名稱的初始標簽,我在調試器中看不到結果對象中的任何實際DD標簽或如何訪問它們。 我到底該如何引用它們? 我已經瘋了,在Google周圍搜索並在stackoverflow上尋找答案,現在我陷入了困境。 在此先感謝您的幫助!

尤里卡! 我想到了。

顯然,Flex無法處理已序列化為WSDL響應的.NET DataSet對象。 相反,您必須在.NET端使用對象數組,以便Flex能夠將其解析為Flex中的結果對象。

另一個選擇是僅將DataSet轉換為.NET中的XML,顯然,Flex / AS3可以輕松讀取它。 是的,這真是la腳。 你好Adobe嗎?

我在Andrew Stopford的博客上找到了這個答案 (謝謝安德魯!)

暫無
暫無

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

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