WCF用于共享数据访问

时间:2010-03-22 10:17:46

标签: c# wcf web-services

我对WCF有一点经验,希望得到您对如何解决以下问题的意见/建议:

需要同时从多个客户端访问Web服务,并且服务需要从共享数据集返回结果。我正在处理的具体项目必须存储IP地址/范围列表。此列表将由一堆Web服务器进行查询以进行验证,我们每分钟会说几千个或更多查询。

我的初始草案方法是将Windows服务用作具有服务契约实现类的WCF主机,该类使用ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple)进行修饰,该类具有列表对象和用于访问的自定义锁定它。所以基本上我有一个带有list =共享数据的WCF服务单例 - >多个客户。我不喜欢的是数据和通信层合并为一个,性能明智,这感觉“不对”。

我真正想要的( - 想要的是Windows服务运行IP列表保存容器类对象的实例,运行WCF服务契约实现的第二个服务以及后者以最小的阻塞以很好的方式查询前者的方式。另一个WCF频道真的不会让我远离最初的草案实施,或者它会不会?

你会采取什么方法?项目仍处于初期阶段,因此完整的设计重做并非毫无疑问。

所有想法都表示赞赏。谢谢!

更新:数据集将动态更改。 Web服务将有一个单独的方法来添加IP或IP范围,最重要的是,根据一些规则,将有一个计划任务每​​10-15分钟触发一次数据清理。

更新2:将启动一个单独的基准测试项目,该项目应使用MySQL作为数据后端(而不是内存列表)。

1 个答案:

答案 0 :(得分:1)

这取决于它必须缩放多远。如果单个服务器就足够了,那就好了;将其保存在内存中(只要您重新启动服务器就可以重新创建数据)。如果数据量很低,那么简单阻塞(lock)应该可以很好地同步数据,或者用于更高的吞吐量ReaderWriterLockSlim。不过,我可能不会将它直接直接存储在WCF类实例中。

我会避免任何涉及会话的事情(如果/这与WCF生命周期有关);这对简单的服务很少有帮助。

对于分布式负载(通过多个服务器),我会考虑单独的专用后端。数据库或memcached / AppFabric /等值得考虑。