【发布时间】: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 有何帮助?
标签: .net sql-server wcf ado.net asmx