前回の記事「Flex と .NET の相互運用性 (2): WebService に基づくデータ アクセス (1)」では、
WebService クラスを使用して WebService にアクセスするということは、実際には、クラス オブジェクトの属性形式を通じて
1 innerfunctiononClick():void
2{
3varservice:WebService=newWebService();
4service.loadWSDL("http: //localhost:1146/FlashFlexService.asmx?wsdl");
5service.addEventListener(ResultEvent.RESULT,onResult);
6service.addEventListener(FaultEvent.FAULT,onFault);
7service.GetBook();
8}
クラス オブジェクトのloadWSDL() メソッドを通じてリモート WebService を直接呼び出し、クラス オブジェクトに関連する処理関数を動的に指定して、ラベルと同様にリモート WebService メソッドを呼び出すだけです。
1 内部関数onResult(evt:ResultEvent):void
2{
3Alert.show(evt.result.Id);
4}
5
6内部関数onFault(evt:FaultEvent):void
7 {
8Alert.show(evt.fault.faultDetail.toString());
9}
上記で、リモート WebService メソッド呼び出しにプログラムでアクセスするための WebService クラスの使用が完了しました。
WebService によって返される DataTable などの責任のある型と、Flex クライアントでそれらを解析する方法を見てみましょう。まず、次のように WebService メソッドを定義します:
1[WebMethod(Description="このメソッドは DataTable 型のデータを返します")]
2publicDataTableGetDataTable()
3{
4DataTabledt=newDataTable("書籍") ;
5dt.Columns.Add("ID",typeof(int));
6dt.Columns.Add("名前",typeof(string));
7dt.Columns.Add("作成者",typeof( string) );
8dt.Columns.Add("価格",typeof(double));
9
10DataRowdr=dt.NewRow();
11dr["Id"]=1;
12dr["名前"]= " フレックス ゲーム開発";
13dr["著者"]="Zhang San";
14dr["価格"]=54.85;
15dt.Rows.Add(dr);
16
17dr=dt.NewRow();
18dr["Id"]=2;
19dr["Name"]=""Flash ゲーム開発"";
20dr["Author"]="李思";
21dr["Price"]=65.50;
22dt.Rows.Add(dr);
23
24returndt;
25}
Flex クライアントの WebService を通じてアクセスすることもできます。以下は、
1
3
4
5
WebService はWebService を削除した後は、WebService が提供するリモート メソッドを呼び出すだけです。以下のように:
1 内部関数onTable(): void
2{
3myService.addEventListener(ResultEvent.RESULT,onSuccess);
4myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.GetDataTable . send();
6}
7
8internalfunctiononSuccess(evt:ResultEvent):void
9{
10//bookGrid.dataProvider=this.myService.GetDataTable.lastResult.Tables.Books.Rows;
11}
12
13internalfunctiononFault (evt:FaultEvent):void
14{
15Alert.show("WebService メソッドの呼び出しに失敗しました、詳細: "+evt.fault.faultDetail.toString());
16
17}
戻り値をバインドしますWebService Flex の DataGrid コンポーネントでは、mxml の関連コードは次のとおりです:
1
2
4
5
6
7
8
9
10
11
12
13
14
さらに、DataGrid の dataProvider プロパティを通じて DataGrid コンポーネントのデータ ソースをバインドします。バインド式のヘルプに加えて、リモート メソッドを正常に呼び出すハンドラー関数で DataGrid のデータ ソースを指定することもできます。上記のコードのコメントされたコード部分を参照してください。 {this.myService.GetDataTable.lastResult.Tables.Books.Rows} は、リモート WebService メソッド GetDataTable() によって返された結果 (DataTable) のすべての行が、DataGrid コンポーネントにバインドするデータ ソースとして使用されることを意味します。ここで Books はデータ ソースの名前 DataTable.、
DataSet、DataTable は、ジェネリック コレクションと比較してパフォーマンスに大きな差があり、複雑なシリアル化と逆シリアル化のプロセスも大きく影響します。.net 2.0 がリリースされて以来、私は常にジェネリックを使用してきました。ビッグデータを渡すため。さて、次に、Flex の WebService メソッドによって返される汎用コレクション データを処理する方法を紹介します。次の WebService メソッド定義があります:
1 [WebMethod(Description="このメソッドは汎用コレクションを返します")]
2publicList
3{
4returnnewList
5{
6newBook
7{
8Id=1,
9Name=""Flex Game Development"",
10Author="Zhang San",
11Price=54.85
12},
13newBook
14{
15Id=1,
16Name=""Flash Game Development"",
17Author="李思",
18Price=65.50
19}
20};
21}
DataSet 型や DataTable 型と比較して、私は個人的に List<> を使用します。 return data のほうが扱いやすいと思います。
これは、一般的な組み合わせ (List<>) の形式で返されるデータ形式であり、DataTable の戻り結果と比較して、より簡潔で明確です。そうは言っても、この戻り値を取得して Flex でこの値を処理するにはどうすればよいでしょうか?実際、上の図を注意深く見てみると、「ArrayOfBook」が見つかります。 ? ? ?これは何ですか?クライアントはこの戻り値を配列の形式で取得できるのではないでしょうか。この詳細をさらに理解するには、戻り値の具体的な構造をさらに深く理解する必要があります。Flex Builder のデバッグ環境を通じて、次の情報を取得できます:
それがはっきりわかりますか? BookList メソッドの lastResult 構造セットの下に 2 つのオブジェクトがあり、ノードをクリックすると、List
1
2
3
4
5< mx:DataGridColumnheaderText="本のタイトル" dataField="名前"/>
6
7
8
9
10
11
12
13
ここでは WebService のデータ アクセスについて紹介します。私の個人的な能力が限られているため、記事に不備があれば皆さんに修正していただければ幸いです。良い提案があれば、それを提案して、みんなで議論し、学び、一緒に進歩していきましょう。 !