[英]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.