繁体   English   中英

并发具有静态值的请求和Web服务

[英]Concurrent requests with a static value and webservices

我有一个Web服务器(ASP.NET-Mono 2.6.7),其中包含一个值static float x和两个方法: getX()setX(newX) 我也有两个客户端,一个是具有c#控制台应用程序的PC,另一个是具有android(ksoap2)的移动设备。 两者都可以访问Web服务器。

我不知道的是:如果我的移动设备在我的PC正在执行setX(newX)尝试执行getX() setX(newX) ,会导致任何麻烦吗?

谢谢。

对服务进行全状态实施不是一个好习惯。 您可以有不同的实例来服务多个请求。 在ASP.NET Web服务中就是这种情况。 在WCF中,可以使用配置来更改实例化行为。 例如,您可以有一个实例来处理所有请求(很少有可以并发的)-如果一个实例的状态可变(如您的情况),则必须同步对该状态的访问。 共享状态上的线程同步将在服务请求时产生瓶颈,因为最多只有一个请求线程可以访问状态。 此外,您无法水平扩展(即,将在多台计算机上处​​理请求的Web场方案)。 如果选择让多个实例为请求服务,则需要将状态外部化,例如将其放入数据库中。 在这种情况下,将招致访问外部数据源的麻烦(这可能比线程同步要高得多),但是您将拥有可扩展的设计。

粗略地说,Web服务类/对象本身不应具有状态。 您可以存储状态,但是通常在外部存储,例如在数据库中。

这是因为,根据配置,不能保证每个客户端的每个请求都将是该类的相同实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM