2011-06-11 4 views
2

e.Result (WCF 서비스에서 반환 된)를 List <>로 변환하는 방법

WCF 서비스가 있습니다.

 public List<Aktivy> Aktivy() 
    { 
     DataClassesDataContext db = new DataClassesDataContext(); 
     var aktivy = from akt in db.Aktivys 
        select aktivy; 
     return aktivy.ToList(); 
    } 

또한 WCF 서비스에 액세스하는 Silverlight 클라이언트가 있습니다.

 private void Grid_Loaded(object sender, System.Windows.RoutedEventArgs e) 
    { 
     ServiceReference.ServiceClient webService = new ServiceReference.ServiceClient(); 
     webService.AktivyCompleted += new EventHandler<ServiceReference.AktivyCompletedEventArgs>(webService_AktivyCompleted); 
     webService.AktivyAsync(); 
    } 

    void webService_AktivyCompleted(object sender, ServiceReference.AktivyCompletedEventArgs e) 
    {    

    } 

클라이언트의 List<Aktivy>에서 e.Result (webService_AktivyCompleted 기능)를 변환하는 방법 측면?

답변

4

당신은 (컬렉션 유형이 ObservableCollection<T>로 deserialise 설정되어 실버 라이트에서 서비스 참조를 구성 할 때 List<T>) 항상 간단한 List<T>을 원할 경우 솔루션 참조 구성 수정 (솔루션 탐색기에서 서비스를 마우스 오른쪽 단추로 클릭)하고 List<T>으로 표시되도록 모음을 설정할 수 있습니다 ..

더 나은 방법 이 물건들을 다룰 때 특정 유형을 요구하는 대신 인터페이스로 작업하는 것입니다. List<T> 대신 IList<T> (ObservableCollection<T>IList<T>을 구현 함)과 작동하도록 코드를 수정하십시오. 이는 서비스를 구성 할 수있는 가능한 모든 컬렉션 유형에서 작동합니다. ObservableCollection<T> 이후

는 컬렉션 필수는 List<T> 왜 좋은 이유가해야 가능한 선택의 가장 다재다능한이다. 한 가지 이유는 서버와 클라이언트간에 코드를 공유하기 때문일 수 있습니다.

3

e.Result를 List로 변환하려면 어떻게해야합니까?

var listOfAktivy = (List<Aktivy>)e.Result; 

어쨌든 watch/quick watch 윈도우에서 e.Result의 유형을 볼 수 있습니다.

+0

아마도 다른 모든 것들이 기본값으로 작동하지 않을 것입니다. 'e.Result'는'List '타입이 아닙니다. – AnthonyWJones

0

이 방법은 클라이언트를 구성하여 서비스 참조에서 컬렉션 유형을 생성하는 방법에 달려 있다고 생각합니다.

기본적으로 클라이언트는 wsdl의 정의에서 간단한 배열을 생성하지만 대신 목록을 생성하도록 구성 할 수 있습니다 (서비스 참조 추가 대화 상자의 고급 탭에서 옵션 콜렉션 유형을 시스템 .Collections.Generic.List). 어느 방법 당신이 그것을 가지고

나는이 작동합니다 생각 (하지만 난 그것을 테스트하지 않았습니다 : 기본적으로

List<Aktivity> listOfAktivy = new List<Aktivy>((IEnumerable<Aktivity>)e.Result); 
+0

그 코드는 매우 효율적이지 않습니다. 코드 전체에 중복 결과를 묻습니다. 앞에서 언급 한 것처럼 서비스 참조를 올바르게 구성하는 것이 훨씬 좋습니다. – AnthonyWJones

+0

@Anthony, 전적으로 동의합니다. 결과가 이미 목록 유형이 아닌 경우 실제로 작동하지 않는 @ Kamarey 응답에 대한 응답이었습니다. 더 명확하게 편집하겠습니다. –

관련 문제