首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Flex 呼叫 WebService 回傳自訂類別:C# 後端與 Flex 前端完整範例

     編輯:更多程式設計知識

架構概覽

C# (ASMX) WebService 定義自訂回傳類別 ReturnResult,包含索引與 DataTable。Flex 透過 `` 消費 WSDL,非同步呼叫並綁定結果到 UI。

C# 後端關鍵程式碼

[Serializable]
public class ReturnResult {
    public int curIndex { get; set; }
    public DataTable idxList { get; set; }
}

[WebMethod(Description = "依照片名取得 Link 所有資料")]
public ReturnResult getLinkDTByImgName(string strTb, string strImgName) {
    ReturnResult rr = new ReturnResult();
    if (conectDB()) {
        // 先查單筆取得 curIndex 與 LinkGuid
        DataTable dt = getInfoByImgName(strTb, strImgName);
        rr.curIndex = Convert.ToInt32(dt.Rows[0][0]);
        string linkGuid = dt.Rows[0][1].ToString();

        // 再查該 LinkGuid 所有資料
        string sql = "SELECT * FROM dbo." + strTb + " WHERE LinkGuid LIKE '%" + linkGuid + "%'";
        SqlDataAdapter da = new SqlDataAdapter(sql, conn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        rr.idxList = ds.Tables[0];
    }
    return rr;
}

// 輔助方法
public DataTable getInfoByImgName(string strTb, string strImgName) { ... }
public bool conectDB() { ... }

Flex 前端 (MXML) 完整範例

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="https://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="initApp(event)">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.events.FlexEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;

            [Bindable] private var arr:ArrayCollection = new ArrayCollection();
            private var idx: String = "";

            protected function initApp(event:FlexEvent):void {
                myWeb.getLinkDTByImgName("PanView", "20131019072740-0000150");
            }

            protected function onResult(event:ResultEvent):void {
                // event.result 對應 ReturnResult 實例
                idx = event.result.curIndex.toString();
                // DataTable 序列化為巢狀物件:Tables.Table.Rows
                arr = new ArrayCollection(event.result.idxList.Tables.Table.Rows);
                Alert.show("索引: " + idx + " 筆數: " + arr.length);
            }

            protected function onFault(event:FaultEvent):void {
                Alert.show("WebService 錯誤: " + event.fault.toString());
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <s:WebService id="myWeb"
            wsdl="https://10.19.1.55/serverPano/WebServiceDuke.asmx?WSDL"
            fault="onFault(event)">
            <s:operation name="getLinkDTByImgName"
                result="onResult(event)"/>
        </s:WebService>
    </fx:Declarations>
</s:Application>

關鍵對應關係

C# 型別WSDL / Flex 型別存取路徑
int curIndexxsd:intevent.result.curIndex
DataTable idxList複雜型別 (DataSet 衍生)event.result.idxList.Tables.Table.Rows (ArrayCollection)

Flex 透過 `` 的 `result` 事件接收強型別物件,`event.result` 直接對應 C# 回傳的 `ReturnResult` 實例。

常見坑點

  1. DataTable 序列化:ASMX 將 DataTable 序列化為 `DataTable` 結構,Flex 端需依實際 WSDL 結構存取(通常為 `Tables.Table.Rows`)。建議先用 SOAP UI 檢視回應 XML。
  2. 跨域:若 Flex SWF 與 WebService 不同網域,需在伺服器根目錄放置 `crossdomain.xml` 允許存取。
  3. 日期/二進位欄位:DataTable 中的 DateTime、Byte[] 可能序列化格式特殊,前端需對應轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved