웹 서비스 기반 데이터 접근(하)Flex 와.NET 상호작용(3)

웹 서비스 클래스 를 사용 하여 웹 서 비 스 를 방문 하 는 것 은태그 의 속성 을 클래스 대상 의 속성 형식 으로 표시 하 는 것 입 니 다.이에 비해 웹 서비스 클래스 를 사용 하 는 것 이탭 을 사용 하 는 것 보다 유연 합 니 다.원 격 방법 을 어떻게 연결 하고 호출 하 는 지 알 아 보 겠 습 니 다.
1     internal function onClick():void2     {3         var service:WebService = new WebService();4         service.loadWSDL("http://localhost:1146/FlashFlexService.asmx?wsdl");5         service.addEventListener(ResultEvent.RESULT,onResult);6         service.addEventListener(FaultEvent.FAULT,onFault);7         service.GetBook();8     }
     클래스 대상 의 loadWSDL()방법 을 통 해 원 격 WebService 를 직접 호출 하고,동적 으로 클래스 대상 에 관련 된 처리 함 수 를 지정 한 다음 탭 과 같이 원 격 WebService 방법 을 호출 할 수 있 습 니 다.
1     internal function onResult(evt:ResultEvent):void2     {3         Alert.show(evt.result.Id);4     }5     6     internal function onFault(evt:FaultEvent):void7     {8         Alert.show(evt.fault.faultDetail.toString());9     }
     위 와 같이 WebService 류 를 사용 하여 원 격 WebService 방법 에 프로 그래 밍 을 통 해 접근 하 는 호출 이 완료 되 었 습 니 다.
     웹 서비스 가 DataTable 등 담당 유형 으로 돌아 가 Flex 클 라 이언 트 에서 어떻게 해석 해 야 하 는 지 살 펴 보 자.먼저 WebService 방법 을 다음 과 같이 정의 합 니 다.
 1 [WebMethod(Description="이 방법 은 DataTable 형식의 데 이 터 를 되 돌려 줍 니 다")] 2 public DataTable GetDataTable() 3 { 4     DataTable dt = new DataTable("Books"); 5     dt.Columns.Add("Id", typeof(int)); 6     dt.Columns.Add("Name", typeof(string)); 7     dt.Columns.Add("Author", typeof(string)); 8     dt.Columns.Add("Price", typeof(double)); 9 10     DataRow dr = dt.NewRow();11     dr["Id"] = 1;12     dr["Name"] = "《"Flex 게임 개발";13     dr["Author"] = "장삼14     dr["Price"] = 54.85;15     dt.Rows.Add(dr);16 17     dr = dt.NewRow();18     dr["Id"] = 2;19     dr["Name"] = "《플래시 게임 개발>20     dr["Author"] = "이사21     dr["Price"] = 65.50;22     dt.Rows.Add(dr);23 24     return dt;25 }
     마찬가지 로 Flex 클 라 이언 트 에서 WebService 를 통 해 접근 하면 됩 니 다.다음은탭 으로 접근 합 니 다.(여기 서 주의해 야 합 니 다.탭 의 name 은 서버 의 WebService 방법 과 동일 해 야 합 니 다)
1     3         4         
5     

     웹 서 비 스 를 제 공 했 고 클 라 이언 트 도 웹 서비스 에 연결 되 었 습 니 다.이 제 는 웹 서비스 가 제공 하 는 원 격 방법 만 호출 할 수 있 습 니 다.다음 과 같다.
 1     internal function onTable():void 2     { 3         myService.addEventListener(ResultEvent.RESULT,onSuccess); 4         myService.addEventListener(FaultEvent.FAULT,onFault); 5         myService.GetDataTable.send(); 6     } 7      8     internal function onSuccess(evt:ResultEvent):void 9     {10         //bookGrid.dataProvider=this.myService.GetDataTable.lastResult.Tables.Books.Rows;11     }12     13     internal function onFault(evt:FaultEvent):void14     {15         Alert.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.my Service.GetDataTable.lastResult.Tables.Books.Rows}은 원 격 웹 서비스 방법 GetDataTable()의 반환 결과(DataTable)의 모든 줄 을 데이터 원본 으로 DataGrid 구성 요소 와 연결 하 겠 다 고 밝 혔 습 니 다.그 중에서 Books 는 데이터 원본 DataTable 의 name 입 니 다.앞의 WebService 방법 에 대한 정 의 를 참조 하 십시오.프로그램 실행 결 과 는 다음 그림 과 같 습 니 다:
         
     
     DataSet,DataTable 은 범 형 집합 에 비해 성능 에 큰 차이 가 있 고 복잡 한 직렬 화 와 반 직렬 화 과정 도 책임 이 있 습 니 다.net 2.0 이 범 형 을 출시 한 후부 터 지금까지 저 는 범 형 으로 빅 데 이 터 를 전달 하 는 것 을 좋아 해 왔 습 니 다.OK,다음은 Flex 에서 WebService 방법 으로 되 돌아 오 는 일반적인 집합 데 이 터 를 어떻게 처리 하 는 지 소개 하 겠 습 니 다.저 희 는 다음 과 같은 WebService 방법 으로 정의 합 니 다.
 1     [WebMethod(Description="이 방법 은 범용 집합 으로 되 돌아 갑 니 다")] 2     public List BookList() 3     { 4         return new List 5         { 6             new Book 7             { 8                 Id = 1, 9                 Name = "《플 렉 스 게임 개발",10                 Author = "장삼                 Price = 54.8512             },13             new Book14             {15                 Id = 1,16                 Name = "《플래시 게임 개발",17                 Author = "이사                 Price = 65.5019             }20         };21     }
     DataSet,DataTable 형식 보다 List<>를 사용 하여 데 이 터 를 되 돌려 주 는 것 이 개인 적 으로 더 쉽다 고 생각 합 니 다.저 희 는 WebService 의 디 버 깅 환경 에서 List<>로 돌아 가 는 WebService 방법 을 직접 테스트 하면 다음 과 같은 결 과 를 볼 수 있 습 니 다.
        
     이것 이 바로 범용 결합(List<>)형식 으로 되 돌아 오 는 데이터 형식 으로 DataTable 의 되 돌아 오 는 결과 보다 더욱 간결 하고 명료 하 다.그 나 저 나 Flex 에서 이 반환 값 을 어떻게 가 져 오고 처리 해 야 합 니까?사실 여 기 는 우리 가 어떤 방식 으로 처리 할 수 있 는 지 잘 보 여 주 었 습 니 다.위의 그림 을 자세히 보면'Array OFBook'을 발견 할 수 있 습 니까???이것 은 무엇 입 니까?클 라 이언 트 가 배열 의 형식 으로 이 반환 값 을 얻 을 수 있 는 것 이 아 닐 까?이 안의 작은 부분 을 더 잘 알 기 위해 우 리 는 내부 에 깊이 들 어가 반환 값 의 구체 적 인 구 조 를 알 아야 한다.Flex Builder 의 디 버 깅 환경 을 통 해 다음 과 같은 정 보 를 얻 을 수 있다.  
          
     잘 보이 시 나 요?BookList 방법의 lastResult 구조 집합 아래 두 개의 대상 이 있 습 니 다.노드 를 누 르 면 우리 가 List을 통 해 돌아 온 두 개의 Book 대상 을 알 수 있 습 니 다.lastResult 의 유형 은 mx.collections.Array Collection 입 니 다.이것 은 정말 ActionScript 의 배열 집합 이 아 닙 니까?좋 습 니 다.그렇다면 Flex 클 라 이언 트 에서 lastResult 를 통 해 WebService 가 되 돌아 오 는 일반적인 집합 데 이 터 를 직접 얻 을 수 있 습 니 다.다음 코드 블록:
 1 internal function onTable():void 2 { 3     myService.addEventListener(ResultEvent.RESULT,onSuccess); 4     myService.addEventListener(FaultEvent.FAULT,onFault); 5     myService.BookList.send(); 6 } 7  8 internal function onSuccess(evt:ResultEvent):void 9 {10     var arrC:ArrayCollection = this.myService.BookList.lastResult as ArrayCollection;11     bookGrid.dataProvider=arrC;12 }13 14 internal function onFault(evt:FaultEvent):void15 {16     Alert.show("WebService 호출 방법 이 실 패 했 습 니 다.자세 한 내용:" + evt.fault.faultDetail.toString());17     18 }
     대응 하 는 mxml 코드 는 다음 과 같 습 니 다(실행 결 과 는 위 에서 DataTable 형식 으로 되 돌아 가 는 것 과 같 습 니 다).
 1  2      3          4              5              6              7              8          9     10     11         12     13 
     웹 서비스 에 관 한 데이터 방문 은 여기까지 입 니 다.개인 능력 에 한계 가 있 기 때문에 글 에 부족 한 점 이 있 으 면 지적 해 주 십시오.만약 무슨 좋 은 건의 가 있 으 면 제기 할 수 있 습 니 다.여러분 은 서로 토론 하고 공부 하 며 함께 발전 할 수 있 습 니 다!!

좋은 웹페이지 즐겨찾기