2015-11-02 59 views
3

我有一個項目使用Entity Framework Model First。數據源位於互聯網中,我需要使用它的網絡/ Web代理工作。我有谷歌它,但我找不到任何有用的結果,因爲所有結果都是關於EF's Entities Proxies。 一些有用的代碼:使用實體框架和Web代理

連接字符串:

<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(); 
     } 

    } 

這就提出了一個網絡連接錯誤。


EDIT


該網絡已經在運行在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

@flindeberg說什麼。您需要使用哪種代理服務器連接到互聯網?它是一個SOCKS代理嗎? – CodeCaster

+0

@flindeberg和#CodeCaster對延遲感到抱歉。希望我的編輯有助於找到答案。這是我想要做的,並且找不到實現它的方式。 –

+0

@CodeCaster'你爲什麼認爲你需要這個?'那麼,訪問互聯網的唯一方法就是使用該代理服務器,並且數據庫位於互聯網中。我真的發現這個評論沒有用處,如果你不想幫忙,請停止提出這樣的問題。謝謝 –

回答

1

這個應用程序可以在internetless網絡上運行,對於獲得互聯網的唯一方法是使用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連接,但所有這一切都取決於實際問題以及您可以控制的連接的哪一側。

+0

很好的回答! @CodeCaster,我有一個關於答案的問題,當你說'這也可能會或可能不會工作,這取決於客戶端的代理服務器的配置'談論通過http隧道,你究竟是什麼意思?換句話說,客戶端的代理Web服務器可能會禁用隧道,您是否有任何有用的鏈接或文檔? –

+1

是的,這正是它的意思。配置良好的HTTP代理服務器將檢測並禁止通過HTTP傳輸非HTTP流量。 – CodeCaster