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

.net 使用WCF安全地让许多并发用户访问MS access、Sqlite或其他基于文件的数据库?,.net,wcf,concurrency,.net,Wcf,Concurrency,我想在数据驱动的网站后面为基于文件的数据库编写一个数据访问层。将有大量的并发更新和读取,我希望至少访问被序列化,这样页面请求将有序地排成一行 什么样的WCF配置可以满足我的需求?我是不是也能做到这一点 我是不是找错人了?我应该依靠数据库驱动程序来为我处理文件锁定吗 编辑:我正在尝试创建一个开源日历网站,它不需要用户处理MySql或SqlServer——换句话说,它应该是一个xcopy部署。您可能希望使用一个具有单一并发性的实例: [ServiceBehavior( InstanceCon

我想在数据驱动的网站后面为基于文件的数据库编写一个数据访问层。将有大量的并发更新和读取,我希望至少访问被序列化,这样页面请求将有序地排成一行

什么样的WCF配置可以满足我的需求?我是不是也能做到这一点

我是不是找错人了?我应该依靠数据库驱动程序来为我处理文件锁定吗


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

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

[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);

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

[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);
序列化“大量并发更新和读取”会给用户带来非常糟糕的性能。我知道这并不是对您的问题的真正回答(这更像是对前提的挑战),但最好使用更适合这种活动的资源管理器,如SQL Server。在体系结构上,试图让用户通过一根稻草查看他们的数据是错误的做法——这通常会导致用户不安。

序列化“大量并发更新和读取”会给用户带来非常糟糕的性能。我知道这并不是对您的问题的真正回答(这更像是对前提的挑战),但最好使用更适合这种活动的资源管理器,如SQL Server。从架构上讲,试图让用户通过吸管查看他们的数据是错误的做法——这通常会导致用户不安。

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

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

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


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

Sqlite可以处理并发读取,因此您不必序列化读取。然而,写操作是另一回事,它们锁定了完整的sqlite数据库

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


你在建什么样的网站

Sqlite可以处理并发读取,因此不必序列化读取。然而,写操作是另一回事,它们锁定了完整的sqlite数据库

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


你在建什么样的网站

是的,我知道,但是你不能xcopy部署任何需要windows服务的东西。我已经更新了我的问题。是的,我知道,但是你不能xcopy部署任何需要windows服务的东西。我已经更新了我的问题。