Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
C# 构建此轮询windows服务的哪个选项更好?_C#_.net_Wcf_Service_Polling - Fatal编程技术网

C# 构建此轮询windows服务的哪个选项更好?

C# 构建此轮询windows服务的哪个选项更好?,c#,.net,wcf,service,polling,C#,.net,Wcf,Service,Polling,我的团队正在编写一个需要从第三方系统轮询数据的windows服务(第三方系统提供我们使用的web服务)。 该过程将如下所示: 1.呼叫第三方WS 2.将接收到的原始数据保存到我们的数据库中 3.处理原始数据 4.将处理后的数据保存到数据库中 5.重复 团队同意我们实际上有两种不同的逻辑操作: 1.获取和保存原始数据 2.处理原始数据并保存结果 我们正在尝试决定以下哪种设计方案更好: 选项1:在同一个windows服务上执行两个操作,每个操作都在它自己的线程上执行 选项2:在windows服务上执

我的团队正在编写一个需要从第三方系统轮询数据的windows服务(第三方系统提供我们使用的web服务)。
该过程将如下所示:
1.呼叫第三方WS
2.将接收到的原始数据保存到我们的数据库中
3.处理原始数据
4.将处理后的数据保存到数据库中
5.重复

团队同意我们实际上有两种不同的逻辑操作:
1.获取和保存原始数据
2.处理原始数据并保存结果

我们正在尝试决定以下哪种设计方案更好:
选项1:在同一个windows服务上执行两个操作,每个操作都在它自己的线程上执行
选项2:在windows服务上执行第一个操作,并为第二个操作异步/单向调用wcf服务

在您看来,哪个选项更好?
如果你有另一个你认为更好的选择,请分享

谢谢。

视情况而定

既然您有一个明显的顺序过程,为什么要使用单独的线程来读取数据,然后再处理数据呢?最简单的方法是一个单线程,循环读取、处理数据,并在某个时间点等待,这样您就不会受到第三方的速率限制

但是,如果处理需要很长时间,您可能希望在单个轮询线程和一组处理数据的工作线程之间分配工作

对于您的初始实现,最简单的选项通常是正确的。在需要之前添加线程和WCF服务调用很少是正确的做法

要给出更好的答案,您确实需要提供更多信息:第三方服务是否限制您一次可以拨打的电话数量或拨打的速度,处理需要多长时间,您需要多久进行一次轮询,…

视情况而定

既然您有一个明显的顺序过程,为什么要使用单独的线程来读取数据,然后再处理数据呢?最简单的方法是一个单线程,循环读取、处理数据,并在某个时间点等待,这样您就不会受到第三方的速率限制

但是,如果处理需要很长时间,您可能希望在单个轮询线程和一组处理数据的工作线程之间分配工作

对于您的初始实现,最简单的选项通常是正确的。在需要之前添加线程和WCF服务调用很少是正确的做法


要给出更好的答案,您确实需要提供更多信息:第三方服务是否限制您一次可以拨打的电话数量或拨打的速度,处理需要多长时间,您需要多久进行一次投票,…

根据您的评论,我想说的是,您有一个线程每秒轮询一次第三方服务并启动两个任务

任务1将原始数据存储到数据库中。 任务2将处理原始数据并将结果存储在数据库中

如果轮询线程检索到1000个条目,它应该毫不延迟地再次轮询


您可以使用System.Threading.ThreadPool或System.Threading.Tasks.Task。

根据您的评论,我认为您有一个线程每秒轮询一次第三方服务并启动两个任务

任务1将原始数据存储到数据库中。 任务2将处理原始数据并将结果存储在数据库中

如果轮询线程检索到1000个条目,它应该毫不延迟地再次轮询


您可以使用System.Threading.ThreadPool或System.Threading.Tasks.Task。

第三方服务位于旧系统之上,该系统不支持一次多次调用。此外,它在一个响应中最多只能发送1000个实体。我们希望将这些过程分开,因为我们的处理速度可能会相对较慢,因为它包含多个空间查询(主要是交叉点)和一个针对非常大的表(大约3M行)的查询。此外,我们需要每秒进行一次轮询,我们的用户需要处理后的数据。第三方服务位于传统系统之上,不支持一次多次呼叫。此外,它在一个响应中最多只能发送1000个实体。我们希望将这些过程分开,因为我们的处理速度可能会相对较慢,因为它包含多个空间查询(主要是交叉点)和一个针对非常大的表(大约3M行)的查询。此外,我们需要每秒钟进行一次投票,我们的用户需要处理后的数据。