将 Entity Framework 与 Web 代理一起使用
Use Entity Framework with Web Proxy
我有一个使用 Entity Framework Model First
的项目。数据源在互联网上,我需要它使用 network/web 代理来工作。我有 google 它但我找不到任何有用的结果,因为所有结果都是关于 EF's Entities Proxies
。
一些有用的代码:
连接字符串:
<add name="ConnectionName" connectionString="metadata=res://*/Latin.csdl|res://*/Latin.ssdl|res://*/Latin.msl;provider=System.Data.SqlClient;provider connection string="data source=mssqlserver.server.com;initial catalog=DatabaseName;user id=admin;password=adminPass;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
用法:
static void Main(string[] args)
{
//set the proxy
var proxy = new WebProxy("109.32.24.24", 808);
proxy.Credentials = new NetworkCredential("", "");
WebRequest.DefaultWebProxy = proxy;
var db = new ContextName();
if (db.QNames.First().Name == "Testing")
{
Console.WriteLine("Success Connection!");
Console.ReadKey();
}
}
这会引发网络连接错误。
编辑
网络的代理是 运行 over http 协议。我知道 http is the protocol you normally use to browse the web with, you do not usually connect to databases with it
但它是唯一可用的,这个问题就是关于它的。您可以将 Web 代理用于多个 .net 连接,甚至是 Web 服务,我的问题是关于将它与 EF 一起使用,我无法使其正常工作。最后一个解决方案可能是使用 Proxifier
之类的程序并将所有计算机的连接重定向到指定的 Web 代理,但这个想法是让它更具可配置性。
this application may be running in a internetless network, that the only way for getting internet is using an HTTP proxy
那么你不能这样做,或者至少不容易。
当网络配置为只有 HTTP 流量可以离开网络时,您将被限制为...只能进行 HTTP 调用。 SQL 服务器的有线协议是自定义的专有二进制协议,与 HTTP 完全不同。因此,如果 HTTP 是您唯一的出路,则您无法通过 HTTP 代理连接到 SQL 服务器的远程实例。那是 , because for example a SOCKS proxy does allow arbitrary TCP connections to run through it, and Windows supports it natively.
但是您可以通过代理设置 HTTP 隧道。参见 。这假定您控制连接的两端,并且可以 运行 或在您的应用程序软件旁边安装任意软件(即隧道软件)。
这也可能有效,也可能无效,具体取决于客户端代理服务器的配置。
但是,这看起来像 XY problem。根据实际问题,有多种做法。
You do not want to expose, nor connect to SQL Server over the internet anyway。
也许您可以 编写一个 web 服务 ,然后您的应用程序会使用它。 Web 服务与 HTTP 通信,因此无需任何额外配置或软件即可通过 HTTP 代理连接。 Web 服务 运行 在 SQL 服务器上或附近,您可以通过该服务公开您的业务逻辑 - 而不必公开您的 SQL 服务器。
另一种选择是 VPN 连接,但同样,这取决于实际问题以及您可以控制连接的哪一侧。
我有一个使用 Entity Framework Model First
的项目。数据源在互联网上,我需要它使用 network/web 代理来工作。我有 google 它但我找不到任何有用的结果,因为所有结果都是关于 EF's Entities Proxies
。
一些有用的代码:
连接字符串:
<add name="ConnectionName" connectionString="metadata=res://*/Latin.csdl|res://*/Latin.ssdl|res://*/Latin.msl;provider=System.Data.SqlClient;provider connection string="data source=mssqlserver.server.com;initial catalog=DatabaseName;user id=admin;password=adminPass;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
用法:
static void Main(string[] args)
{
//set the proxy
var proxy = new WebProxy("109.32.24.24", 808);
proxy.Credentials = new NetworkCredential("", "");
WebRequest.DefaultWebProxy = proxy;
var db = new ContextName();
if (db.QNames.First().Name == "Testing")
{
Console.WriteLine("Success Connection!");
Console.ReadKey();
}
}
这会引发网络连接错误。
编辑
网络的代理是 运行 over http 协议。我知道 http is the protocol you normally use to browse the web with, you do not usually connect to databases with it
但它是唯一可用的,这个问题就是关于它的。您可以将 Web 代理用于多个 .net 连接,甚至是 Web 服务,我的问题是关于将它与 EF 一起使用,我无法使其正常工作。最后一个解决方案可能是使用 Proxifier
之类的程序并将所有计算机的连接重定向到指定的 Web 代理,但这个想法是让它更具可配置性。
this application may be running in a internetless network, that the only way for getting internet is using an HTTP proxy
那么你不能这样做,或者至少不容易。
当网络配置为只有 HTTP 流量可以离开网络时,您将被限制为...只能进行 HTTP 调用。 SQL 服务器的有线协议是自定义的专有二进制协议,与 HTTP 完全不同。因此,如果 HTTP 是您唯一的出路,则您无法通过 HTTP 代理连接到 SQL 服务器的远程实例。那是
但是您可以通过代理设置 HTTP 隧道。参见 。这假定您控制连接的两端,并且可以 运行 或在您的应用程序软件旁边安装任意软件(即隧道软件)。
这也可能有效,也可能无效,具体取决于客户端代理服务器的配置。
但是,这看起来像 XY problem。根据实际问题,有多种做法。
You do not want to expose, nor connect to SQL Server over the internet anyway。
也许您可以 编写一个 web 服务 ,然后您的应用程序会使用它。 Web 服务与 HTTP 通信,因此无需任何额外配置或软件即可通过 HTTP 代理连接。 Web 服务 运行 在 SQL 服务器上或附近,您可以通过该服务公开您的业务逻辑 - 而不必公开您的 SQL 服务器。
另一种选择是 VPN 连接,但同样,这取决于实际问题以及您可以控制连接的哪一侧。