servicestack,Asp.net,Concurrency,Synchronization,Httprequest,servicestack" /> servicestack,Asp.net,Concurrency,Synchronization,Httprequest,servicestack" />

Asp.net 从ServiceStack 3配置强制执行的同步请求

Asp.net 从ServiceStack 3配置强制执行的同步请求,asp.net,concurrency,synchronization,httprequest,servicestack,Asp.net,Concurrency,Synchronization,Httprequest,servicestack,我有一个ASP.NET应用程序,使用NGINX作为服务器和Servicestack 3 当涉及到PUT请求时,我希望在它们从NGINX服务器进入Servicestack时同步处理它们(永远不要同时处理多个请求,因为这可能导致它们以与调用它们的顺序不同的顺序完成任务)。据我所知,控制用于传入请求的线程数量是可能的——如果我能够将该数量限制为1,我想我会得到我想要的结果 我应该如何从ServiceStack配置级别实现这一点(如果可能的话,但如果是这样,我应该如何强制执行同步)?您不太可能想要阻止整

我有一个ASP.NET应用程序,使用NGINX作为服务器和Servicestack 3

当涉及到PUT请求时,我希望在它们从NGINX服务器进入Servicestack时同步处理它们(永远不要同时处理多个请求,因为这可能导致它们以与调用它们的顺序不同的顺序完成任务)。据我所知,控制用于传入请求的线程数量是可能的——如果我能够将该数量限制为1,我想我会得到我想要的结果


我应该如何从ServiceStack配置级别实现这一点(如果可能的话,但如果是这样,我应该如何强制执行同步)?

您不太可能想要阻止整个HTTP服务器,这可能会导致所有其他请求失败

你刚刚试过使用单锁吗?e、 g.您可以使用您的服务类型:

lock (typeof(MyService))
{
}

但是像这样锁定Web服务器通常是一个坏主意,您应该考虑使用某种乐观并发控制,在尝试更新过时记录时抛出错误。e、 g.在OrmLite中,您可以使用其where客户端发送代表其记录状态的RowVersion,并且如果自OrmLite将抛出一个
OptimisticConcurrencyException
以来该版本已被更新,则在ServiceStack中会自动转换为409冲突HTTP错误响应。

Yes,单重锁是可行的;我只是想通过配置Servicestack来实现这一点。谢谢你告诉我关于乐观并发性的事情,我将对此进行研究;问题是我不希望抛出错误。我希望我的PUT请求按照它们进入的顺序被服务,在队列中等待彼此。@Claudiu锁定HTTP服务器请求是一个非常糟糕的主意,如上所述的锁定可以对请求进行排队,但当排队的请求在修改/过时的数据上运行时,这并没有帮助,这就是为什么乐观并发性很重要的原因。听起来你真正想要的是使用一个MQ,其中请求是通过FIFO执行的,你可以将它配置为使用单个线程,这样它们一次执行一个线程,而不会锁定基础设施资源并严重影响系统性能/吞吐量;我想这是解决我问题的办法!它甚至这样说。对Redis的一些更好的解释。非常感谢,@mythz!结果只是用了一把单锁。