ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址

Posted

技术标签:

【中文标题】ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址【英文标题】:ADO .Net - How to specify source IP address in SqlConnection on system with multiple IP addresses 【发布时间】:2015-01-13 11:23:34 【问题描述】:

我有一个配置了多个 IP 地址的网络适配器的服务器。服务器上安装了不同的 ASMX 和 WCF Web 服务,出于某种安全原因,对于我从网络管理员收到的每个 WEB 服务,都有专用的源 IP 地址,用于通过 ADO .Net 连接到指定的 RDBMS。通过大量实验,我得出结论,任何 SqlConnection 对象仅通过网络适配器上配置的第一个 IP 地址进行连接(第一个 IP 地址作为默认源 IP 地址运行)。 有没有办法为 SqlConnection 对象指定源 IP 地址? 我已经在Specify Source IP for ADO connection from Delphi to mysql 看到了针对类似问题提出的解决方案,但这种解决方案不适用于我的情况。

我需要更类似于下面在 ASMX Web 服务客户端中使用的方式,我可以通过回调指定源 IP 地址:

protected override System.Net.WebRequest GetWebRequest(Uri uri)

    System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)base.GetWebRequest(uri);
    webRequest.ServicePoint.BindIPEndPointDelegate += new System.Net.BindIPEndPoint(BindIPEndPointCallback);
    return webRequest;

private IPEndPoint BindIPEndPointCallback(ServicePoint sp, IPEndPoint epRemote, int tries)

    IPAddress ipLocal;
    EndPoint epLocal;
    IPAddress.TryParse(strIPAddr, out ipLocal);
    if (tries <= 3)
    
        epLocal = new IPEndPoint(ipLocal, 0);
    
    else
    
        throw new Exception(string.Format("BindIPEndPointCallback: error connecting via 0", strIPAddr));
    
    return (IPEndPoint)epLocal;

SqlConnection 对象有什么类似的吗?

【问题讨论】:

为什么不把ip地址放在连接字符串中? 这将定义目标 IP 地址,而不是用于连接到 RDBMS 的源 IP。 只有一条评论。你看过 RouteTable 类吗? System.Web.Routing.RouteTable 据我所知是一个用于路由 Web 请求的类,即在 MVC 中。我看不出它对 SqlConnection 有何帮助? 【参考方案1】:

我不知道 SQLConnection 对象上有任何用于指定本地 IP 的设置。

但是,您可以设置自定义 Windows 防火墙规则来阻止源 IP(备用网络适配器)的远程 IP (SQL)。

【讨论】:

以上是关于ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java.net.URLConnection 上指定本地地址?

如何从 asmx Web 服务管理多个 ado.net 数据库连接

如何使用 ADO.NET DataSet 和 DataAdapter 将树结构持久保存到具有自动递增 ID 的数据库表中

如何在 ASP.NET Core MVC 中使用 ADO.NET 向存储过程添加参数?

.net中如何获得计算机IP地址?

ADO。NET 紧急!!!!高手请进。