2012-10-24 31 views
0

我的問題是試圖在C#中創建一個連接字符串,該連接字符串遠程連接到SQL Server 2012數據庫。如果承載SQL Server的計算機不需要導航到的端口號,我可以成功執行此操作。現在,我們已經重新路由了我們的IP一點,到託管SQL Server的計算機的IP是XXX.XXX.XXX.XXX:16500,其中SQL Server仍在默認端口1433上偵聽。SQL Server連接字符串。 W /遠程機器需要IP:PORT和SQLPORT

我明白你可以指定SQL Server實例正在使用的端口號如此;

data source=XXX.XXX.XXX.XXX,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;"); 

我們的問題是,我們的遠程機器不只是一個IP。它是一個IP和一個端口。

XXX.XXX.XXX.XXX:16500將手動導航到所需的PC,忽略端口號將帶你到另一臺機器。我們正在努力完成這樣的事情;

data source=XXX.XXX.XXX.XXX:16500,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;"); 

我無法找到我的生活如何做到這一點。我想將我的數據源設置爲遠程IP:PORT,以及設置SQL Server將監聽的端口(我瞭解1433是默認端口,但在某些情況下,我們可能需要更改它,因此它需要有未來)

我試過了;

data source=XXX.XXX.XXX.XXX:16500,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;"); 

ERROR:

A network-related or instance-specific error occured while establishing a connection to the SQL Server...

data source=XXX.XXX.XXX.XXX:16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;"); 

ERROR:

A network-related or instance-specific error occured while establishing a connection to the SQL Server...

data source=XXX.XXX.XXX.XXX,16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;"); 

ERROR:

A connection was successfully established with the server, but then an error occurred durring the pre-login handshake. (Provider: TCP Provider, error:0 - An existing connection was forcibly closed by the remote host.)

在這裏,它似乎我只是連接到錯誤的服務器,試圖使用SQL Server端口16500,這是不正確的。

任何人都可以照耀一些光,這可能嗎?

回答

2

這聽起來像你的IP地址實際上是一個NAT設備,它將流量轉發到用於連接到另一臺機器的端口上。如果是這種情況,則需要讓NAT管理員在NAT上創建一個公用端口,該端口將轉發到SQL Server計算機上的端口1433。任何端口轉發都只能轉發到單個端口,所以如果沒有設置新的轉發規則,您嘗試執行的操作就無法工作。

1

從網絡的角度來看,你的意思是沒有意義的: 根據定義,主機綁定到一個或多個IP地址,而不是IP:端口組合。

我同意塞巴斯蒂安,這聽起來像你的網絡管理員設置NAT或其他類型的路由/防火牆,以便連接(通過TCP?)到XXX.XXX.XXX.XXX:16500在路由器/防火牆/ NAT會將連接轉發到某些在SQL服務器計算機的某個端口上偵聽的應用程序(可能是遠程桌面應用程序)。

您需要請求將端口轉發到sql server以配置爲Sebastian建議。另一種選擇是設置一個SSH服務器來偵聽已轉發的端口(或另一個端口),然後您(或您的網絡管理員)就可以將安全隧道設置爲需要的應用程序,而無需更改防火牆配置。

通過多個端口上的NAT /路由器/防火牆完成多個應用的​​轉發或使用SHH在單個端口上進行隧道傳輸時,每個端口都有其優點和缺點。與您的網絡管理員交談,他應該能夠判斷哪種方案更適合您的案例。

0

MS SQL Server is XXX.XXX.XXX.XXX:16500, where MS SQL is still listening on default port 1433.

嗯..不.. NAT設備是XXX.XXX.XXX.XXX被轉發端口16500到您的SQL Server。您不知道SQL服務器IP地址,因爲您的應用程序完全無法訪問該地址,因爲NAT位於您和它之間。你也不知道/關心安裝了哪個端口號的SQL服務器:這就是NAT的工作。

因此使用正確的連接字符串是:

data source=XXX.XXX.XXX.XXX,16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;"; 

現在,你說你在這裏收到一個錯誤。該錯誤表明您已成功連接,但還有其他問題正在進行。這可能會導致這樣的事情包括:

  • SQL服務器已經達到它的連接數限制(最有可能)
  • SQL服務器需要加密連接,但是這不是你正在試圖建立
  • 錯誤的SSL證書什麼正在使用僅
  • SQL服務器要求Windows身份驗證,您不使用
  • TCP/IP連接不會在SQL Server上啓用你和NAT之間
  • 數據壓縮或者NAT和SQL服務器。
  • NAT在連接信息到達SQL服務器之前(當然也可能配置錯誤的NAT)。
  • SynAttackProtect在某個地方打開,你已經嘗試了很多東西,它被踢出你的身邊。
  • NAT和SQL服務器之間有足夠的延遲導致SQL Server將連接踢出。
  • 和許多許多......

從本質上講,這裏有一個網絡的問題,這不是由於端口號。你必須讓網絡管理員參與,看看發生了什麼。

我會沉迷於問題是在SQL服務器上配置問題,以便人爲地限制連接數量或NAT在將請求正確轉發到數據庫服務器之前將其頂起。

看到以下一些: http://betav.com/blog/billva/2008/11/solution-forcibly-closed-sql-s.html http://arshpreet9.wordpress.com/category/sql-errorsbug-fixes/