2013-03-04 158 views
0

我有服務器和客戶端。
客戶端調用服務器上的方法,服務器響應必須準備一個字典併發送回客戶端。
此操作可能需要時間。
它應該是異步的。我閱讀說明和例子。
主要是BeginXXX和EndXXX IAsyncResult。但如果我需要服務器返回對象的字典。我如何實現這個?WCF服務器客戶端與對象的異步回調

我認爲當發送一個回調委託時,我可以發送一個客戶端函數的簽名作爲委託,當服務器完成時它將調用具有適當字典數據的委託。

回答

1

1)在VS(或SLSvcUtil)中添加服務引用,爲Silverlight項目生成方便的代理代碼和事件。如果你願意,你可以用它來實現你的'服務/服務器代理'的回調模式。您可以在常規.net應用程序中使用此代碼,並進行一些修改。

2)VS for .Net項目可以使用異步方法生成代理。 SvcUtil - too

3)對於真正的長時間運行操作,您可以使用WCF服務callbacks(+一些綁定限制)。

0

如果我明白你在一個正確的方式,你問這個(基於電子圖書館項目): WCF服務器端:

EBooksLibraryEntities ebe = new EBooksLibraryEntities();  
public List<Book> tabBooks() 
    { 
     return ebe.Books.ToList(); 
    } 

客戶端:

ServiceReference1.Service1Client sr = new ServiceReference1.Service1Client(); 
    List<ServiceReference1.Book> llb = new List<ServiceReference1.Book>(); 
    private void GetBooksByAuthor() 
    { 
     sr.tabBooksByAuthorCompleted += new EventHandler<ServiceReference1.tabBooksByAuthorCompletedEventArgs>(sr_tabBooksByAuthorCompleted); 
     sr.tabBooksByAuthorAsync(); 
    } 
    void sr_tabBooksByAuthorCompleted(object sender, ServiceReference1.tabBooksByAuthorCompletedEventArgs e) 
    { 
     foreach (var item in e.Result) 
     { 
      yourList.Add(item); 
     } 
    }