2009-05-29 32 views
0

我想在数据驱动的网站后面为基于文件的数据库编写数据访问层。将会有大量的并发更新和读取操作,至少我想要访问被序列化,以便页面请求会有一个很好的有序行。使用WCF安全地让大量的并发用户安全地访问MS-Access或Sqlite或其他基于文件的数据库?

什么WCF配置会让我想要什么? PerSession的并发性让我有吗?

我吠叫错误的树,我应该依靠数据库驱动程序来为我做照顾文件锁吗?

编辑:我试图把一个开放源代码的日历网站,不需要用户处理MySql或SqlServer - 换句话说,它应该是一个xcopy部署。

回答

2

你可能会想用一个实例与单并发:

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

这将确保“符合GET”的所有呼叫。如果您使用PerSession实例上下文,则最终将并发调用放入后端文件。您还需要确保您设置了自定义的节流行为。您可以在您的配置中或通过代码执行此操作:

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

序列化“大量并发更新和读取”将导致用户的性能很差。我认识到这不是真正的答案(更多是对前提的挑战),但是转移到更适合于此类活动(如SQL Server)的资源管理器会更好。在架构上,试图让用户通过数据吸引人的眼光看待是一种错误的方式 - 通常会导致用户不高兴。

1

Matthew,

你的用例是什么?您是否允许用户特别插入数据库?如果是这样,你最好写一些代码来获取数据并将其导入到SQL Server数据库中。它的设计更好。

如果您担心成本问题,可以使用SQL Server Express或Postgres。

+0

是的,我知道,但你不能xcopy部署任何需要Windows服务的东西。我已经更新了我的问题。 – MatthewMartin 2009-05-29 20:17:19

1

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

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

你在建什么样的网站?

相关问题