Heim > Artikel > Backend-Entwicklung > Interoperabilität zwischen Flex und .NET (3): Datenzugriff basierend auf WebService (Teil 2)
Im vorherigen Artikel „Flex- und .NET-Interoperabilität (2): Datenzugriff basierend auf WebService (1)“ haben wir den Zugriff auf Webservice über das Tag
Die Verwendung der WebService-Klasse für den Zugriff auf WebService bedeutet tatsächlich, die Attribute des
1 internalfunctiononClick():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}
Rufen Sie den Remote-WebService direkt über die Methode loadWSDL() des Klassenobjekts auf, geben Sie dynamisch die relevante Verarbeitungsfunktion für das Klassenobjekt an und Rufen Sie es dann wie ein Etikett auf. Die Remote-WebService-Methode ist verfügbar.
1 internalfunctiononResult(evt:ResultEvent):void
2{
3Alert.show(evt.result.Id);
4}
5
6internalfunctiononFault(evt:FaultEvent):void
7{
8Alert.show(evt.fault.faultDetail.toString());
9}
Das Obige ist abgeschlossen Verwenden Sie die WebService-Klasse, um programmgesteuert auf Remote-WebService-Methodenaufrufe zuzugreifen.
Werfen wir einen Blick auf die verantwortlichen Typen wie DataTable, die von WebService zurückgegeben werden, und wie man sie auf dem Flex-Client analysiert. Definieren Sie zunächst die WebService-Methode wie folgt:
1[WebMethod(Description="Diese Methode gibt Daten vom Typ DataTable zurück")]
2publicDataTableGetDataTable()
3 {
4DataTabledt=newDataTable("Books");
5dt.Columns.Add("Id",typeof(int));
6dt.Columns.Add("Name",typeof(string)) ;
7dt.Columns.Add("Author",typeof(string));
8dt.Columns.Add("Price",typeof(double));
9
10DataRowdr=dt. NewRow( );
11dr["Id"]=1;
12dr["Name"]=""Flex Game Development"";
13dr["Author"]="Zhang San";
14dr["Price"]=54,85;
15dt.Rows.Add(dr);
16
17dr=dt.NewRow();
18dr["Id"]=2;
19dr["Name"]=""Flash Game Development"";
20dr["Author"]="李思";
21dr["Price"]=65,50;
22dt. Zeilen. Add(dr);
23
24returndt;
25}
Sie können auch über WebService auf dem Flex-Client darauf zugreifen. Der Zugriff erfolgt über
1< mx:WebServiceid="myService"
2wsdl= "http://localhost:1146/DataWebService.asmx?wsdl"useProxy="false">
3
4
5< ;/mx:WebService>
Der WebService wurde bereitgestellt und der Client hat sich mit dem WebService verbunden. Jetzt muss er nur noch die von bereitgestellte Remote-Methode aufrufen der WebService. Wie folgt:
1 internalfunctiononTable():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("Call WebService Die Methode ist fehlgeschlagen, Details: „+evt.fault.faultDetail.toString());
16
17}
Binden Sie den Rückgabewert von WebService an die Flex DataGrid-Komponente, mxml-bezogenen Code Wie folgt:
1
2
4
5
6
7
8
9
10
11
12
13
14
Binden Sie die Datenquelle der DataGrid-Komponente über die dataProvider-Eigenschaft des DataGrid. Zusätzlich zur direkten Bindung des Ausdrucks über „{}“ können wir auch erfolgreich aufrufen Remote-Methode Geben Sie die Datenquelle für das DataGrid in der Verarbeitungsfunktion an, siehe den kommentierten Codeteil im obigen Code. {this.myService.GetDataTable.lastResult.Tables.Books.Rows} bedeutet, dass alle Zeilen des Ergebnisses (DataTable), das von der Remote-WebService-Methode GetDataTable() zurückgegeben wird, als Datenquellen für die Bindung an die DataGrid-Komponente verwendet werden, wobei Books die ist Name der Datenquelle DataTable,
DataSet, DataTable weist im Vergleich zu generischen Sammlungen eine große Leistungslücke auf, und die komplexen Serialisierungs- und Deserialisierungsprozesse sind seit der Einführung von Generics in .net 2.0 ebenfalls sehr verantwortlich Ich habe es immer vorgezogen, Generika für die Übertragung großer Datenmengen zu verwenden. OK, jetzt werde ich vorstellen, wie die generischen Sammlungsdaten verarbeitet werden, die von der WebService-Methode in Flex zurückgegeben werden. Wir haben die folgende WebService-Methodendefinition:
1 [WebMethod(Description="Diese Methode gibt eine generische Sammlung zurück")]
2publicList
3{
4returnnewList
5{
6newBook
7{
8Id=1,
9Name=""Flex Game Development"",
10Author="张Three",
11Price=54.85
12},
13newBook
14{
15Id=1,
16Name=""Flash Game Development"",
17Author= " Li Si",
18Price=65.50
19}
20};
21}
Im Vergleich zu den Typen DataSet und DataTable halte ich es persönlich für bequemer, List< zu verwenden ;> um Daten zurückzugeben Einfach zu handhaben.
Dies ist das Datenformular, das in Form einer generischen Kombination (Liste<>) zurückgegeben wird. Im Vergleich zum Rückgabeergebnis von DataTable ist es prägnanter und klarer. Wie erhalten wir jedoch diesen Rückgabewert und verarbeiten diesen Wert in Flex? Tatsächlich wurde hier deutlich gezeigt, wie wir damit umgehen können. Wenn Sie sich das Bild oben genau ansehen, finden Sie „ArrayOfBook“? ? ? ? Was ist das? Könnte es sein, dass der Client diesen Rückgabewert in Form eines Arrays erhalten kann? Um die Details besser zu verstehen, müssen wir tief in die Tiefe gehen, um die spezifische Struktur des Rückgabewerts zu verstehen. Über die Debugging-Umgebung von Flex Builder können wir die folgenden Informationen erhalten:
Sehen Sie? es klar? Es gibt zwei Objekte unter dem lastResult-Struktursatz der BookList-Methode. Wenn Sie auf den Knoten klicken, handelt es sich um die beiden Book-Objekte, die wir über List
1internalfunctiononTable():void
2{
3myService.addEventListener(ResultEvent.RESULT,onSuccess);
4myService.addEventListener( FaultEvent .FAULT,onFault);
5myService.BookList.send();
6}
7
8internalfunctiononSuccess(evt:ResultEvent):void
9{
10vararrC:ArrayCollection= this .myService.BookList.lastResultasArrayCollection;
11bookGrid.dataProvider=arrC;
12}
13
14internalfunctiononFault(evt:FaultEvent):void
15{
16Alert.show(" Aufruf Die WebService-Methode ist fehlgeschlagen, Details: „+evt.fault.faultDetail.toString());
17
18}
Der entsprechende MXML-Code lautet wie folgt (das Operationsergebnis ist das gleiche als der oben zurückgegebene DataTable-Typ):
1
2
3
4
5
6
7< ;mx:DataGridColumnheaderText="Preis" dataField="Preis"/>
8
9
10
11< mx:Buttonlabel="DataTable"click="onTable()"/>
12
13
Einführung in den Datenzugriff von WebService At An dieser Stelle hoffe ich aufgrund meiner begrenzten persönlichen Fähigkeiten, dass mich jeder korrigiert, wenn der Artikel Mängel aufweist. Wenn Sie gute Vorschläge haben, können Sie diese auch vorbringen. Lassen Sie alle gemeinsam diskutieren, lernen und Fortschritte machen! !