c# - 如何限制 .Net Web 应用程序的 ODBC 连接数?

标签 c# .net connection odbc pooling

我在 C# 中创建了一个 .Net 3.5 Web 服务,它通过 ODBC 与 Progress OpenEdge 数据库通信。

此数据库已设置为仅允许 Web 服务正在使用的用户帐户同时连接 10 个(第三方限制)。

当 Web 服务收到大量并发请求并尝试为每个请求连接到数据库时,我遇到了一个大问题。当超过连接限制时,数据库将在几分钟内拒绝新的传入连接。

Web 服务在 Windows Server 2008 上运行。 为 ODBC 驱动程序启用了连接池。

我将不得不以某种方式限制我的 Web 服务尝试建立的连接数,但我不知道如何做。我正在使用的 Progress OpenEdge ODBC 驱动程序不支持最大池大小参数。

我已经阅读了很多微软关于这个主题的文档,但我所能得出的结论是:

  • 默认启用连接池
  • 无法从我的应用程序配置连接池
  • 默认最大池大小为 100
  • 除非您使用的驱动程序支持,否则无法更改最大池大小

有人可以确认这一点,和/或建议一种方法来限制这种情况下的连接数吗?非常感谢:)

最佳答案

您可以尝试提到的 WCF 方法,或者您可以通过编程方式实现连接池。

public interface IService
{
    void Execute(Action<IDbConnection> command);
    T Execute<T>(Func<IDbConnection, T> command);
}

public sealed class ConnectionManager : IService
{
    public const int MaxConnections = 10;

    private readonly string _connectionString;
    private readonly SemaphoreSlim _workers = new SemaphoreSlim(0, MaxConnections);

    public ConnectionManager(string connectionString)
    {
        _connectionString = connectionString;
    }

    public void Execute(Action<IDbConnection> command)
    {
        lock(_workers)
        {
            using(var connection = new OdbcConnection(_connectionString))
            {
                connection.Open();
                command(connection);
            }
        }
    }

    public T Execute<T>(Func<IDbConnection, T> command)
    {
        lock(_workers)
        {
            using(var connection = new OdbcConnection(_connectionString))
            {
                connection.Open();
                return command(connection);
            }
        }
    }
}

SemaphoreSlim 将阻止超过 10 个连接打开,假设被调用的代码没有尝试任何偷偷摸摸的尝试。

关于c# - 如何限制 .Net Web 应用程序的 ODBC 连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793408/

相关文章:

c# - DynamicRouteValueTransformer 更改值不会产生任何影响

c# - Greybox GB_showcenter 不显示弹出窗口

.net - 使用 C# 和 .NET 环境获取 jpeg 图像的分辨率?

.net - WCF:如何以编程方式重新创建这些 App.config 值?

mysql - 如何解决错误驱动程序: SQLSTATE[HY000] [2002] Connection timed out error in symfony 4 project deployed on amazon aws中发生异常

c# - Silverlight 更新绑定(bind)

c# - 从 OOB Silverlight App 返回机器唯一 key

java - 如何连接客户端(在 VirtualBox 上)和服务器(在本地主机上)?我使用 CORBA 和 C++/Java

azure - Azure 辅助角色上的并发连接

c# - 找不到 OpenAPI 描述