使用WCF安全地让许多并发用户安全地访问MS-Access或Sqlite或其他基于文件的数据库?

时间:2009-05-29 18:37:28

标签: .net wcf concurrency

我想在数据驱动的网站后面为基于文件的数据库编写数据访问层。会有很多并发更新和读取,我至少要将访问序列化,这样页面请求就会有一个很好的有序行。

什么WCF配置能让我得到我想要的东西? PerSession并发能让我在那里吗?

我是否咆哮错误的树,我应该依靠数据库驱动程序来处理文件锁定吗?

编辑:我正在尝试组建一个不需要用户处理MySql或SqlServer的开源日历网站 - 换句话说,它应该是xcopy部署。

4 个答案:

答案 0 :(得分:2)

您可能希望使用具有单一并发的Single实例:

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Single)]

这将确保所有来电都“排队”。如果您使用PerSession实例上下文,那么您将最终对后端文件进行并发调用。您还需要确保设置自定义限制行为。您可以在配置中或通过代码执行此操作:

ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
    MaxConcurrentCalls = 200,
    MaxConcurrentInstances = 200,
    MaxConcurrentSessions = 200,
};
ServiceHost host = ...
host.Description.Behaviors.Add(throttlingBehavior);

答案 1 :(得分:1)

马修,

你的用例是什么?您是否允许用户临时插入数据库?如果是这样,您可能最好编写一些获取数据并将其导入SQL Server数据库的代码。它更适合这样做。

如果您担心费用,可以使用SQL Server Express或Postgres。

答案 2 :(得分:1)

Sqlite可以处理并发读取,因此您不必序列化读取。然而,写入是一个不同的故事,他们锁定完整的sqlite数据库。

我不知道ms-access如何处理并发。

你在建什么样的网站?

答案 3 :(得分:0)

序列化“大量并发更新和读取”将导致用户的性能非常糟糕。我认识到这不是你问题的答案(更多的是对前提的挑战),但是转移到更适合这种类型的活动(如SQL Server)的资源管理器会更好。在架构上,试图让用户在他们的数据上看起来是一个错误的方法 - 它通常会导致用户不满。