【问题标题】:Use Entity Framework with Web Proxy将实体框架与 Web 代理一起使用
【发布时间】:2015-11-02 22:27:31
【问题描述】:

我有一个使用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 这样的程序并将所有计算机的连接重定向到指定的网络代理,但这个想法是让它更具可配置性。

【问题讨论】:

  • @flindeberg 说了什么。您需要哪种类型的代理服务器才能连接到互联网?它是 SOCKS 代理吗?
  • @flindeberg 和#CodeCaster 抱歉耽搁了。希望我的编辑有助于找到答案。这就是我正在尝试做的事情,但找不到方法。
  • @CodeCaster Why do you think you need this? 好吧,访问互联网的唯一方法是使用该代理,并且数据库在互联网中。我真的觉得这个 cmets 没用,如果你不打算帮忙,请停止提出这种问题。谢谢
  • 您的问题不清楚,也没有什么意义,这就是我要求澄清的原因。你会发现我的评论毫无用处,但那是你的损失。 :) 我问这些问题不是为了惹恼你,而是为了让你的问题可以回答。目前无法回答。
  • 好吧@CodeCaster,我真的不明白为什么这个问题不清楚,我想要的很简单:将EF应用程序连接到互联网上的一个SQL服务器,唯一的限制是应用程序可能在无互联网网络中运行,这是获取互联网的唯一方法是使用 Http 代理。我认为这是不可能的,请回答,并尝试解释原因。我会很感激的。

标签: c# .net entity-framework proxy http-proxy


【解决方案1】:

此应用程序可能在无互联网网络中运行,获得互联网的唯一方法是使用 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

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

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

【讨论】:

  • 很好的答案!!! @CodeCaster,我有一个关于答案的问题,当你说This also may or may not work depending on the configuration of the client's proxy server 谈论通过http 的隧道时,你到底是什么意思?换句话说,可能是客户端的代理网络服务器禁用了隧道,您有任何有用的链接或文档吗?
  • 是的,就是这个意思。配置良好的 HTTP 代理服务器将检测并禁止通过 HTTP 传输非 HTTP 流量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多