WCF服务共享存储

问题描述:

我有两种方法简单的WCF服务:写,读。第一种方法将简单的数据存储在某个存储中,另一种方法将通过键读取这些数据。WCF服务共享存储

写入方法调用后应该可以正确读取数据。数据也应该在短时间内存储(可配置,如10分钟TTL)。

为不同用户存储这些数据的最佳解决方案是什么?

类似于System.Runtime.Caching/memcached/mongodb?

UPD。任何建议?不理想但很好?

+0

它依赖。数据在检索后是否必须保留?这是在多线程环境中吗?你想存储的数据有多大? – RoelF 2013-03-07 13:25:36

+0

多线程环境 - YES;即使检索数据,数据是否仍然保留 - YES;数据大小很小,每个项目几kb; – barbarian 2013-03-07 13:57:29

+0

你会存储数百个项目还是更像数百万?数据是否需要保留即使IIS主机被回收? – 2013-03-07 21:35:42

,可以有以下选择:

1 System.Runtime.Caching

优点:

  • 内置,价格便宜落实
  • 有到期机制

缺点:

  • 并发的问题,您的钥匙将需要独特
  • 恶意用户可以在一个简单的按键
  • 数据的情况下,获取其他用户的数据WCF服务主机重新启动后将会丢失

2. WCF Session

优点:

  • 简单访问缓存数据,同一个服务实例用于处理用户请求。
  • 没有并发问题,用户被会话隔离。

缺点:

  • 内存开销,对于每个会话
  • 创建单个服务实例约束工作流与会话开始/结束[OperationContract的(IsInitiating =真,IsTerminating =真)]
  • 数据将在wcf服务主机重启后丢失

3. ASP.NET session state

优点:

  • 与持久性机制内置的会话(数据不丢失的重启,看到的sessionState模式= “SQLServer的”)。
  • 没有并发问题,用户被会话隔离。

缺点:

  • 只能工作在兼容模式下,把两种技术。
  • 需要SQL Server

4.自我实现的存储,从文件系统到SQL Server/MongoDB的

优点:

  • 数据不会丢失在重新启动
  • 根据职位可能有内部数据过期机制。

缺点:

  • 的部署/配置/支持成本
  • 手册执行
  • 手册用户隔离/并发性/安全处理

根据您的意见答案,你有: 多线程环境,其中数据必须保留,即使它被检索到 (我假设直到过期时间用完),并且数据量很小,每个项目几kb; 您将存储数百个项目,并且即使在服务重新启动后也需要保留数据(再次,直到过期)。

现在,它取决于 - 生产级系统可能需要容错, 负载平衡和扩展 - 我会选择sql server,尽管这意味着更高的开发成本。

如果您需要为测试/演示目的快速和肮脏的解决方案 - 去与内存缓存(当然,在这种情况下,你将有restart-要求后放弃-persist)。

另一种快速的解决办法是将存储在临时文件,其中关键是文件名的数据。这会在重新启动之间持续数据,但是在安全性和并发性方面会有相同的问题。