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

3
我有一台服务器,其中一个网络适配器配置了多个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地址放入连接字符串中呢? - paparazzo
1
这将定义目标IP地址,而不是连接到RDBMS的源IP。 - Dragan Zhivaljevikj
只是一条注释。你看过 RouteTable 类吗? - paparazzo
据我所知,System.Web.Routing.RouteTable 是用于路由 Web 请求的类,尤其在MVC中使用。我不明白它怎么能帮助我处理 SqlConnection? - Dragan Zhivaljevikj
1个回答

0

我不知道SQLConnection对象上有任何设置可以指定本地IP。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接