Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有对象的WCF服务器客户端异步回调_Wcf_Callback - Fatal编程技术网

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

具有对象的WCF服务器客户端异步回调,wcf,callback,Wcf,Callback,我有服务器和客户端。 客户端在服务器上调用一个方法,响应的服务器必须准备一个字典并发送回客户端。 此操作可能需要时间。 它应该是异步的。我阅读说明和示例。 主要是BeginXXX和EndXXX IAsyncResult。但是如果我需要服务器返回对象字典。我如何实现这一点 我认为,当发送回调委托时,我可以将一个客户端函数的签名作为委托发送,当服务器完成时,它将使用适当的字典数据调用委托。1)在VS中添加服务引用(或)为Silverlight项目生成带有事件的方便的代理代码。如果需要,可以使用它为“

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

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

1)在VS中添加服务引用(或)为Silverlight项目生成带有事件的方便的代理代码。如果需要,可以使用它为“服务/服务器代理”实现回调模式。您可以将此代码用于常规的.net应用程序,也可以进行一些修改

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


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

如果我以正确的方式理解您,您会问这个问题(基于eLibrary项目): WCF服务器端:

 EBooksLibraryEntities ebe = new EBooksLibraryEntities();    
 public List<Book> tabBooks()
    {
        return ebe.Books.ToList();
    }
EBooksLibraryEntities ebe=新的EBooksLibraryEntities();
公共列表tabBooks()
{
返回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);
        }
    }
servicerence1.Service1Client sr=newservicerence1.Service1Client();
List llb=新列表();
私有void GetBooksByAuthor()
{
sr.tabBooksByAuthorCompleted+=新事件处理程序(sr_tabBooksByAuthorCompleted);
sr.tabBooksByAuthorAsync();
}
void sr_tabBooksByAuthorCompleted(对象发送方,服务引用1.tabBooksByAuthorCompletedEventArgs e)
{
foreach(e.Result中的var项)
{
添加(项目);
}
}