我有一个使用Entity Framework Model First
的项目。数据源在互联网上,我需要它使用网络/网络代理。我有谷歌它,但我找不到任何有用的结果,因为所有结果都是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();
}
}
这会引发网络连接错误。
修改
网络的代理正在通过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代理,但这个想法使其更具可配置性。
答案 0 :(得分:1)
此应用程序可能在无网络网络中运行,获取Internet的唯一方法是使用HTTP代理
然后你不能这样做,或者至少不容易。
当网络配置为只有HTTP流量可能离开网络时,您将被限制为......仅进行HTTP呼叫。 SQL Server的有线协议是一种自定义的专有二进制协议,它不以任何方式与HTTP相似。因此,如果HTTP是您唯一的出路,则无法通过HTTP代理连接到SQL Server的远程实例。那是why I asked what kind of proxy you're talking about,因为例如SOCKS代理确实允许任意TCP连接通过它,Windows supports it natively。
但是,您可以通过代理设置HTTP隧道。见Tunnel any kind of TCP traffic through HTTP/s。这假设您控制连接的两端,并且可以在应用程序软件旁边运行或安装任意软件(即隧道软件)。
根据客户端代理服务器的配置,这也可能有效,也可能无效。
然而,这看起来像XY problem。根据实际问题,有各种方法。
You do not want to expose, nor connect to SQL Server over the internet anyway。
也许你可以编写一个webservice ,然后你的应用程序会消耗掉。 Web服务与HTTP进行通信,因此可以通过HTTP代理连接到该服务,无需任何其他配置或软件。 Web服务在SQL Server上或附近运行,您可以通过该服务公开您的业务逻辑 - 而不必公开您的SQL Server。
另一种选择是VPN连接,但同样,所有这些都取决于实际问题以及您可以控制的连接的哪一侧。