ホームページ  >  記事  >  バックエンド開発  >  Flex と .NET の相互運用性 (3): WebService に基づくデータ アクセス (2)

Flex と .NET の相互運用性 (3): WebService に基づくデータ アクセス (2)

巴扎黑
巴扎黑オリジナル
2016-12-20 15:18:441045ブラウズ

前回の記事「Flex と .NET の相互運用性 (2): WebService に基づくデータ アクセス (1)」では、 タグを介した Webservice へのアクセスを紹介しました。実際、プログラミングを通じて WebService に動的にアクセスすることもできます。Flex SDK には WebService クラスが用意されています。

WebService クラスを使用して 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 を通じてアクセスすることもできます。以下は、 タグを使用してアクセスします。 mx:operation> タグの名前はサーバー側の WebService メソッドと同じである必要があります):

12wsdl="http:// localhost:1146/DataWebService.asmx ?wsdl"useProxy="false">
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
23dataProvider="{this.myService.GetDataTable.lastResult.Tables.Books.Rows}">
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="このメソッドは汎用コレクションを返します")]
2publicListBookList()
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 を通じて返された 2 つの Book オブジェクトであることがわかり、lastResult の型は mx.collections.ArrayCollection ではありません。本当にActionScriptの配列ですか?この場合、Flex クライアントは、lastResult を通じて WebService から返される汎用コレクション データを直接取得できます。次のコード ブロック:

1
2
3
4
5< mx:DataGridColumnheaderText="本のタイトル" dataField="名前"/>
6
7
8

9
10
11
12
13

ここでは WebService のデータ アクセスについて紹介します。私の個人的な能力が限られているため、記事に不備があれば皆さんに修正していただければ幸いです。良い提案があれば、それを提案して、みんなで議論し、学び、一緒に進歩していきましょう。 !


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。