2011-10-05 6 views
2

Silverlight 및 WCF에서 새로운 기능입니다. 나는 1 초의 대기 후에 목록 개체 컬렉션의 데이터로 경고 메시지 상자를 표시하는 곳에서 간단한 Silverlight 응용 프로그램을 만들었습니다.Silverlight 메서드를 WCF 서비스에서 호출하는 방법

WCF를 사용하여 데이터베이스에 연결했습니다. 그러나 나는 먼저 컬렉션 ​​목록에 모든 데이터베이스 데이터를 추가 한 다음 실버 라이트가 반복되는 실버 라이트에 해당 목록 객체를 보냅니다. WCF 서비스에서 목록 클래스에 액세스

public List<int> GetData() 
     { 
      List<int> list = new List<int>(); 
      using (SqlConnection connection = new SqlConnection()) 
      { 
       connection.ConnectionString = 
        System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnection"].ToString(); 
       using (SqlCommand command = connection.CreateCommand()) 
       { 
        command.CommandType = CommandType.Text; 
        command.CommandText = "Select * from insertItem"; 
        connection.Open(); 
        using (SqlDataReader reader = command.ExecuteReader()) 
        { 
         while (reader.Read()) 
         { 
          list.Add(reader.GetInt32(1)); 

         } 
        } 
       } 

      } 
      return list; 
     } 

실버 코드와 두 번째의 대기 후 메시지 상자에 표시 :

WCF 서비스 코드 목록 컬렉션에서 데이터를 삽입하는 데이터베이스에 연결하는

Service1Client client = new Service1Client(); 
      client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(DisplayResults); 
      client.GetDataAsync(1); 

private void DisplayResults(object sender, GetDataCompletedEventArgs e) 
     { 
      timer.Stop(); 
      ObservableCollection<int> list = e.Result; 
      foreach (int i in list) 
      { 

       HtmlPage.Window.Alert(i.ToString()); 
       Thread.Sleep(1000); 
      } 

     } 

내가 먼저 표시 한 후 목록 클래스 컬렉션의 모든 데이터를 넣어, 그리고 기다리지 않고 WCF 서비스에서 실버에 직접 데이터를 표시 할 수있는 방법을 누군가가 말해 주 시겠어요? 더 나은 접근 방법은 무엇일까요?

+0

나는 당신의 질문을 이해하지 못한다고 생각합니다. 뭐하고 싶어? wcf 서비스를 통해 데이터베이스에 액세스 할 때 어딘가에 "데이터를 넣어야"한다는 것을 의미합니다. 따라서 직렬화되어 호출자에게 전송 될 수 있습니다 (실버 라이트가 발생 함). 너무 느린 경우 Thread.Sleep()을 제거하려고 할 수 있습니다 ... – UrbanEsc

+0

실제로 데이터베이스에서 데이터를 순차적으로 가져올 때마다 직접적으로 표시 할 수 있도록 WCF 클래스에서 직접 모든 Silverlight 메서드에 액세스하려고합니다. List 컬렉션 객체에서 첫 번째를 넣지 않고 잠시 기다린 후 실버 라이트로 바꾼다. 가능한가? – Stardust

+0

수정 된 답변보기 – UrbanEsc

답변

1

내가하는 일이 모범 사례인지 묻는 경우 확실하지 않습니다. 예, 웹 서비스를 통해 발신자에게 데이터를 전송하려면 먼저 데이터베이스에서 데이터를 수집해야합니다. 너는 그렇게했고, 괜찮아. 어쩌면 어떤 매퍼를 사용할 수도 있었지만 그 부분이 작동하면 괜찮을 것입니다. 왜 그것을 바꿀까요? 문제가 무엇입니까? 천천히? 뭔가 다른 것, 아마도 너무 많은 데이터를 보낼 것입니까? 몇 가지 제약 조건을 두어 처음 15 개 항목 만 검색하고 사용자가 결과를 탐색 할 때 더 많은 요청을 계속하십시오.

목록에 항목을 추가하는 데 너무 오래 걸린다는 것이 걱정된다면 문제가 아니라 요청한 데이터의 크기 일 것입니다.

데이터를 표시하려면 가능한 컨트롤을 추가하고 데이터 소스를 목록에 설정하기 만하면됩니다. 끝난!

여기에 walkthrough이며, 여기에 an article입니다. 귀하의 실버 전문가 인 ScottGu 자신이 그 주제를 다루고 있습니다. 시작하는 데 도움이되어야합니다.

실제로 데이터 액세스 방법을 변경하려면 RIA Services for Silverlight을 살펴볼 수도 있지만 이는 고급 기술로 간주됩니다.

도움이되지 않는 경우 질문을 수정하는 것이 좋습니다. 그렇다면 현재 디자인에서 무엇을 바꿔야한다고 생각하십니까? 무엇이 예상대로 잘되지 않습니까?

편집 : 내 의견에 대답 한 후에는 Duplex Service을 구현하여 원하는 것을 달성 할 수 있다고 생각합니다.

이 항목에서는 실버 라이트 클라이언트와 통신 할 수있는 이중 WCF (Windows Communication Foundation) 서비스를 만드는 방법을 설명합니다. 이중 서비스 인 은 Silverlight 클라이언트에 대한 콜백 채널을 유지 관리하므로 서비스 은 클라이언트을 호출 할 수 있습니다. 이중 서비스는 예를 들어 인스턴트 메시징 용 채팅 서버 또는 클라이언트에 알림을 보내는 모니터링 서비스를 비롯한 수많은 응용 프로그램을 보유합니다. 이 샘플에서는 클라이언트가 지정된 수의 제품 항목을 이름순으로 주문할 수있는 서비스를 제공합니다. 주문 처리를 시뮬레이션 한 후 주문 상태로 고객에게 다시 전화합니다.

관련 문제