将实体框架与Web代理一起使用

本文关键字:一起 代理 Web 实体 框架 | 更新日期: 2023-09-27 18:20:21

我有一个使用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=&quot;data source=mssqlserver.server.com;initial catalog=DatabaseName;user id=admin;password=adminPass;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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代理,但其想法是使其更易于配置。

将实体框架与Web代理一起使用

该应用程序可能运行在无互联网的网络中,获得互联网的唯一方法是使用HTTP代理

那么你就无法做到这一点,或者至少不容易做到。

当网络配置为只有HTTP流量可以离开网络时,则您被限制为。。。只进行HTTP调用。SQL Server的有线协议是一种自定义的专有二进制协议,在任何方面都与HTTP不同。因此,如果HTTP是唯一的出路,那么您就无法通过HTTP代理连接到SQL Server的远程实例。这就是为什么我问你说的是什么类型的代理,因为例如,SOCKS代理确实允许任意TCP连接通过它运行,而Windows本身就支持它。

但是,您可以通过代理设置HTTP隧道。请参阅通过HTTP/s传输任何类型的TCP流量。这假设您控制连接的两端,并且可以在应用程序软件旁边运行或安装任意软件(即隧道软件)。

这也可能起作用,也可能不起作用,具体取决于客户端代理服务器的配置。

然而,这看起来像是一个XY问题。根据实际问题,有各种方法。

您不想公开,也不想通过internet连接到SQL Server。

也许您可以编写一个Web服务,然后您的应用程序就会使用它。web服务使用HTTP,因此可以通过HTTP代理进行连接,而无需任何额外的配置或软件。该Web服务运行在SQL Server上或附近,您可以通过该服务公开您的业务逻辑,而不必公开您的SQL Server。

另一种选择是VPN连接,但同样,这取决于实际问题以及你可以控制连接的哪一边。