WCF丢弃重复数据

时间:2011-11-11 18:45:18

标签: c# wcf

我正在两个服务之间编写一个网关,其中一个服务是一个非常慢的Web服务,并且快速过载,另一个是超级快速并经常发送相同的数据。

我想让我的服务丢弃(尽可能早)我收到的数据等于以前的对象。

最好的方法是什么?

我所知道的最好的方法(我怀疑是最好的)是将反序列化后的接收对象与我已经收到的对象集(换句话说,缓存)进行比较。

我更关心的是,我丢弃的内容与计算上容易丢弃一样,而不是确保丢弃所有重复数据。

仅供参考,除其他外,数据还包括经常相同的地理信息。

澄清:

情况:

服务1速度很快,并且经常发送没有新数据的更新。 服务2很慢

我想将服务1中的数据发送到服务2(稍作修改),但前提是我还没有发送过相同的数据。

戴尔

3 个答案:

答案 0 :(得分:1)

如果没有更多信息,很难说最好的方法是什么,但听起来你可以从相对简单的缓存中受益。我不确定你是否处于沉重的阅读或重读场景中,但你应该能够以任何方式使其工作。

IE,调用快速服务并在调用慢速服务之前检查缓存中的结果。

答案 1 :(得分:0)

我认为肯尼斯提出了一个好主意。

为了解决这个问题,我觉得你有类似这种情况的事情(如果这不正确就澄清你的问题)......

[服务1] - > (电话) - > [服务2]

  • 服务1 - 更快,超载服务2.
  • 服务1 - 将重复数据发送到服务2,其中大部分都可以忽略。

如果是这种情况,正如Kenneth建议的那样,您可能希望实现已经从Service 1发送的请求的缓存机制,并存储从Service 2收到的答案。因此,在伪代码中,类似这样的东西:

  1. 服务1检查某个公共存储,以查看是否已发送要发送的请求。
  2. 如果有,它会检查从服务2发回的答案。
  3. 如果没有,则发送请求并将该请求添加到发送的请求列表中。
  4. 提供答案时,该答案与原始请求一起存储在缓存中。
  5. 这也有利于通过服务1更快地查找。

答案 2 :(得分:0)

最早的一点是检测重复数据是否在数据的发送方中,而不是在接收方中。

在那里添加内存缓存。如果对象是重复的,则无需将其序列化并浪费任何时间发送它。

顺便说一下,如果你想要一个好的.Net内存缓存,我已经好运Couchbase's MemcacheD