如何在部分中获得wcf响应

时间:2016-06-07 05:46:52

标签: c# wcf

我必须在WindowsApplication上显示多个图表,因为我从UI中选择了一些参数。复制请求(对象)中的那些并将其发送到WCF服务端。基于请求参数,我们进行一些处理并以列表格式创建响应并将其发送回客户端。在完整的过程中,服务器需要大约18秒的执行业务逻辑,之后客户端需要大约6到8秒才能在UI上显示所有List的图形(为每个Response对象生成图形)。在此业务处理时,客户需要等待大约18秒。如果我们以部分而不是完整的List发送数据,则可以保存客户端图生成时间。所以我关心的是如何发送部分响应数据(和平)。

2 个答案:

答案 0 :(得分:0)

IT是WCF服务正在做什么的问题。它花费一些时间执行业务逻辑(可能包括连接到数据库并执行一些SQL的时间),然后通过线路发送数据。数据落在客户端需要多长时间才能通过编程来影响。

但是,如果业务逻辑花费的时间太长,则表明在服务端进行了许多操作以准备响应。要进行优化,可以将这些操作划分为较小的操作,并为每个操作公开端点方法。然后在客户端,您随后调用这些方法并在调用之间适当地更新UI。这样,您可以更快地从某些数据接收服务的响应。

答案 1 :(得分:0)

以下是我想到的两个选项:

  1. 拥有一个回调函数,服务器端每次对该请求进行更新时都会调用该函数。客户端将从WCF请求处理,并将传递要由服务器调用的函数。服务器将为每条信息调用该函数。
  2. 服务器有两种方法。这将是一个“开始处理”,它将为您的处理请求启动,并将返回该处理请求的唯一ID。第二种方法是查询是否有任何新信息。 像这样:

    var requestId = serverProxy.BeginProcessing(inputData); var response = serverProxy.InquireProgress(requestId); while(!response.Completed) { //Here you check if the response contains any new piece of information and then sleep for some time. }

  3. 我更喜欢第二个选项,即使它涉及更多代码,因为这样服务器不必“知道”他的客户端。客户端检查它们是否有任何更新。 另外,如果你确实选择了第二个选项,那么我还会编写一个小的SDK包装器,它只是将这两个服务器方法+循环逻辑暴露在一个异步方法后面。

    希望这有帮助