2010-02-16 14 views
0

我目前正在使用Flex中的WSDL,即在由.NET提供服務的後端。所有的操作似乎都很好,除了一個,其結果對象由於某種奇怪原因沒有被AS3正確解析。我檢查了Fiddler/Charles中的響應XML,並且數據在那裏,但不在Flex變量檢查器中的結果中。罪魁禍首是子標籤'DD'(result.data.result.Tables.DD.Columns)我只看到它們中的一個,它有17個子標籤子元素,但它們被列爲數組索引0-17,其值「RID」,「NP」,「LI」等。但這些標籤沒有值。我想我沒有得到任何<DD>標籤。Flex/AS3在一個特定操作上不完全解碼WSDL XML。我到底該如何補救?

這裏是我的結果處理:

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標籤或如何訪問它們。我究竟如何參考它們?我瘋狂谷歌搜索和搜索stackoverflow的答案,現在我卡住了。預先感謝任何幫助!

回答

1

尤里卡!我想到了。

顯然,Flex無法處理已被序列化爲WSDL響應的.NET DataSet對象。相反,您必須在.NET端使用Object Arrays才能將Flex解​​析爲Flex中的結果對象。

另一種選擇是在.NET中將DataSet轉換爲XML,這顯然可以通過Flex/AS3輕鬆讀取。是的,這是令人難以置信的跛腳。你好,Adobe?我拿起這個答案Andrew Stopford's blog. (Thanks Andrew!)

相關問題