网络方法和数据库连接

网络方法和数据库连接

问题描述:

如果我在Web服务方法的一次调用中打开了某些全局可用的数据库连接,并且如果在此方法的第二次调用时同时发生此全局可行事件?这些资源是共享的还是每个调用都有自己的资源?网络方法和数据库连接

谢谢

全局变量往往就是这样,全局的。如果您的全局变量是C#static,它将由AppDomain中的webservice方法共享。这显然容易出错 - 最好是,如果每个webservice方法在需要时获得新连接,并在方法结束之前关闭它。

+0

我的Web方法正在使用某些不支持并发的DAL层。正因为如此,我想了解我会看到哪些副作用。 – 2011-05-30 15:41:14

+0

@Night Walker听起来像你期望看到的最大的副作用是对性能的巨大打击。我建议找一个新的DAL。 – 2011-05-30 15:48:11

+0

@Night Walker,DAL对连接做了什么?连接实际上是否存储在“静态”?它是否有打开/关闭连接的规则等。根据这一点,您可能会或可能不会遇到严重的并发问题。如果您在问题中添加更多信息,我会尽我所能详细说明。 – driis 2011-05-30 15:50:59

通常Web服务使用Http请求。 在这种情况下,每个电话都可能定义对象,因为服务是无状态的...

对于服务,最好使用某种数据库连接管理。通常,您可以根据每个请求调整打开/关闭新连接。请注意,最有可能您将使用逻辑连接和连接池。这些有助于显着减少打开物理连接的负载。物理连接在没有您直接控制的情况下创建,实际上是重量级的操作。

不要将连接放入共享静态变量中,因为连接通常是一次性资源,这意味着您必须处理它。如果出现问题,并且您的数据库连接已损坏,则后续所有呼叫都将视为厄运。