WCF服务器客户端与对象的异步回调

问题描述:

我有服务器和客户端。
客户端调用服务器上的方法,服务器响应必须准备一个字典并发送回客户端。
此操作可能需要时间。
它应该是异步的。我阅读说明和例子。
主要是BeginXXX和EndXXX IAsyncResult。但如果我需要服务器返回对象的字典。我如何实现这个?WCF服务器客户端与对象的异步回调

我认为当发送一个回调委托时,我可以发送一个客户端函数的签名作为委托,当服务器完成时它将调用具有适当字典数据的委托。

1)在VS(或SLSvcUtil)中添加服务引用,为Silverlight项目生成方便的代理代码和事件。如果你愿意,你可以用它来实现你的'服务/服务器代理'的回调模式。您可以在常规.net应用程序中使用此代码,并进行一些修改。

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

3)对于真正的长时间运行操作,您可以使用WCF服务callbacks(+一些绑定限制)。

如果我明白你在一个正确的方式,你问这个(基于电子图书馆项目): 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); 
     } 
    }