加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何在WCF服务中返回值后继续处理

发布时间:2020-12-16 09:36:45 所属栏目:asp.Net 来源:网络整理
导读:我有一个WCF服务,反过来调用其他几个Web服务.服务按优先顺序排序,但并行调用.每个服务都将以真或假的方式响应,并且当收到所有响应时,最优先的肯定将返回给客户端. 但是,在此期间的任何时候,最受欢迎的服务可能会以肯定的方式响应.此时继续查询其他服务是没有
我有一个WCF服务,反过来调用其他几个Web服务.服务按优先顺序排序,但并行调用.每个服务都将以真或假的方式响应,并且当收到所有响应时,最优先的肯定将返回给客户端.

但是,在此期间的任何时候,最受欢迎的服务可能会以肯定的方式响应.此时继续查询其他服务是没有意义的,所以我希望取消执行并将结果返回给客户端.

我能做的很多:

// Use parallelOptions to store the cancellation token
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;
Parallel.ForEach<IntegrationObj>(externalServices,po,x =>
{
    try
    {
        // Send requests
        SendExternalRequest(x);
        po.CancellationToken.ThrowIfCancellationRequested();
    }
    catch (OperationCanceledException e)
    {
        /// Don't throw an exception if the loop was cancelled
    }
    catch (Exception e)
    {
        LogError(e.Message);
    }
});
if (positiveResponses.Count > 0) {
    // Get the most preferred positive response and send it back to the client
    res = positiveResponses.Where(
        x => x.ID == PreferredServiceID)
        .FirstOrDefault();
}
return res;

上面的代码是我的代码的一个非常简化的版本,但实际上它检查每个响应以查看它当前是否是最受欢迎的服务.如果是这样,它取消循环.

但是……以这种方式取消循环将等待已经调用的任何服务在终止循环之前完成.任何服务都有可能超时,这当然被视为否定.如果只是其中一次超时,它会在我的响应时间上增加10秒.

我想做的是以下之一:

>将首选服务返回给客户端,然后继续处理已经启动的服务中的响应(这纯粹是为了记录目的,以便我知道这些服务的正/负速率).
>立即取消循环并忘记剩余的回复.理想情况下,我不想这样做,因为这意味着响应为积极的服务将不会被记录,这将影响他们的偏好评级.

所以我的问题是:

我想要实现的目标是什么?我意识到parallel.foreach可能不是这项工作的最佳工具,或者我可能无法在响应客户端后记录响应.最重要的要求是客户端收到快速响应,而无需等待服务响应,而“赢家”已被选中.

解决方法

它当前设置的方式是所有服务都是并行启动的,但只有在所有服务完成后才能对您的检查进行编程.
如果你想坚持使用foreach方法,你可以在foreach中编写if条件,这样如果服务首先完成,它将直接执行对肯定响应的检查,你可以做出相应的反应(返回值/杀死其他的).请注意,这种方法有更多的线程insafeties,您将不得不小心(从您的某个服务可能尝试写入的列表中读取).也可能同时完成2个服务,因此你的if语句会触发两次.

foreach方法的另一种选择是为每个服务创建一个线程,将所有线程放在一个列表中,并在启动所有线程后立即启动一个while循环,以便为完成的服务继续检查(使用休眠过程).这样,通过断开while循环,您可以在其他线程仍在运行时返回该值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读