2011-10-05 50 views
2

我是Silverlight和WCF中的新成員。我已經創建了一個簡單的Silverlight應用程序,我在這裏等待了一秒鐘之後,從列表對象集合中的數據顯示警報消息框。如何從WCF服務調用Silverlight方法

我已經使用WCF連接到數據庫。但是我首先將所有數據庫數據添加到集合列表中,然後將該列表對象發送到silverlight,該silverlight正在迭代。

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; 
     } 

的Silverlight代碼從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服務向Silverlight顯示數據而無需等待首先將所有數據放入List類集合中,然後顯示它?有什麼更好的辦法?

+0

我不認爲我理解你的問題。您想做什麼?我的意思是當你通過你的wcf服務訪問數據庫時,你必須「把你的數據」放在某個地方,以便它可以被序列化併發送給你的調用者(這恰好是silverlight)。如果它太慢,你可能想要刪除Thread.Sleep()然後... – UrbanEsc

+0

我實際上想直接在WCF類中訪問任何silverlight方法,以便每當我從數據庫中順序獲取任何數據時,我可以直接顯示它在等待一秒鐘之後將Silverlight放入List收藏夾對象中。可能嗎? – Stardust

+0

看到我編輯的答案 – UrbanEsc

回答

1

我不知道你是否問你在做什麼是最佳做法。是的,您需要首先從數據庫收集數據,以便能夠通過Web服務將其發送給您的呼叫者。你做到了,那很好。也許你可以使用一些映射器,但由於這部分工作,你應該沒問題。爲什麼改變它?問題是什麼?它慢嗎?必須是不同的東西,也許它是你想發送的太多數據?嘗試添加一些約束條件,僅檢索前15個項目,並在用戶瀏覽結果時繼續請求更多項目。

如果您擔心向列表中添加東西需要太長的時間,請不要這樣做,這可能不是問題,而是所需數據的大小。

要顯示數據,只需添加一個有能力的控件並將數據源設置爲列表。完成!

這是一個walkthrough,這裏是an article涵蓋了你的silverlight Guru no1,ScottGu本人的話題。應該幫助你開始。

如果你真的想改變你的數據訪問方式,你可以看看RIA Services for Silverlight,儘管這被認爲是一種先進的技術。

如果這不幫助你,你可能想要改進你的問題。那麼,您認爲您目前的設計需要改變什麼?什麼不按預期工作?

編輯:在你回答我的評論後,我想你可能會通過實施Duplex Service來達到你想要的效果。

本主題介紹如何創建可與Silverlight客戶端通信的雙工Windows通訊基礎(WCF)服務。雙工服務維護到Silverlight客戶端的回調通道,這允許服務撥打電話給客戶端。雙工服務具有許多應用程序,包括例如用於即時消息傳遞的聊天服務器或向客戶端發送通知的監視服務。此示例提供的服務允許客戶按名稱訂購指定數量的產品項目。它模擬處理訂單,然後以訂單狀態回撥給客戶。