2012-08-07 139 views
1

我們的系統使用VB6傳統應用程序和更新的.NET應用程序的組合。這些應用程序已部署到我們的客戶端,並且它們從終端服務器框中運行應用程序,SQL Server數據庫運行在不同的框中。VB6應用程序可以連接到SQL Server,但.NET應用程序不能

VB6的應用程序正常工作,而所有的.NET應用程序的失敗在啓動時(試圖連接到數據庫中讀取配置信息)每次出現錯誤:

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)

這裏是很奇怪的事情:我在C#中創建了一個測試.NET應用程序,該應用程序複製了.NET應用程序使用的確切連接字符串 - 我部署了一個顯示所使用的實際連接字符串的應用程序的檢測版本 - 並且測試應用程序工作

VB6連接字符串(作品):Provider=SQLOLEDB;Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;

.NET連接字符串(包括工作和不工作):Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;Application Name="ourappname"

我們的其他客戶都沒有遇到過這個問題,用相同的二進制文件,其中告訴我這是.NET應用程序如何與這個特定客戶端系統交互的問題。

我應該採取哪些步驟來排除故障或解決此問題?我現在真的很茫然。我希望以前有人看到過這個問題;我找不到與Google相關的任何內容。


  • 兩個箱子是在Windows Server 2008 R2 SP1在VMware上運行,並且是在同一個域中
  • 兩個框運行ESET NOD32;禁用並沒有改變任何東西
  • SQL Server是2008 R2 RTM的默認實例(在同一個盒子上也有2008和2008 R2命名實例)
  • 應用程序(和我的測試應用程序)是.NET 4.0
  • 應用程序使用SQL登錄進行身份驗證(是的,我檢查了失敗應用程序使用的密碼是否正確)
  • 某些.NET應用程序使用不同的代碼來執行應用程序啓動,但它們都顯示相同錯誤
  • 一些.NET應用程序是C#,一些是VB,一些是混合的(VB應用程序,C#內核程序集)
  • 我試着修復.NET 4.0安裝
  • 我試圖重新啓動這兩個框
  • 我已經試過部署源二進制文件,使得我們的部署子系統是規避(如果這是造成某種腐敗)
  • 我本地編譯所構建的應用程序遇到相同的行爲,原來,這是通過團隊系統內置
+0

如果測試.NET應用程序的工作那麼它是不是與.NET的一個問題。確定您正在運行的測試應用程序與不能正常運行的生產應用程序之間有什麼不同。 – Paparazzi 2012-08-07 19:53:10

+0

@Blam:是的,就是這樣 - 相同的二進制文件在別處工作,而不是在這個特定的客戶端系統上。我會看看我是否可以將生產應用程序剝離到它的工作點。我認爲這可能是一個構建配置問題或類似的東西。 – 2012-08-07 19:56:37

回答

3

我發現,通常有這種行爲的幾個主要原因:

  1. SQL Server未配置爲偵聽特定的連接類型。要確定這一點,請在SQL計算機上打開SQL Server配置管理器,單擊SQL Server網絡配置,然後單擊MSSQLServer的協議。驗證是否啓用了TCP/IP。

  2. 的SQL Server不允許遠程連接(如果其他應用程序的連接,那麼這顯然不是一個問題)。

  3. 客戶機沒有配置使用SQL Server的支持的協議交談SQL Server或客戶機具有進入不正確的配置信息。要驗證這一點,請從Run ...提示符運行cliconfg,並確保已啓用相應的協議,並且Alias選項卡中沒有任何衝突的別名。我通常爲連接字符串中配置的計算機名稱添加一個適當的IP地址,以防出現DNS問題(至少用於測試)。

  4. 由於VB6客戶的工作和.Net客戶端不存在可能是一個問題與64位與32位的訪問。如果您的應用程序編譯爲64位或任何CPU,則可以嘗試32位版本以查看是否解決了訪問問題。如果是這樣,那麼這很可能是64位SQL客戶端配置問題。

+0

1. TCP/IP已打開。 2.不是問題。 3.「cliconfig」?我不熟悉這一點。如果您的意思是SQL Server配置管理器,則沒有配置別名,並且將Native Client配置設置爲默認值(共享內存,TCP/IP,命名管道都已啓用,並按此順序)。 4.這是一個有趣的想法。我將不得不檢查構建配置。謝謝。 – 2012-08-07 20:14:59

+0

由於VB6工作和.NET失敗,我也想知道這是一個32位與64位的事情。 .NET是精彩的,它的EXE文件的IL代碼可以被編譯爲它實際運行的機器的優化形式(參見http://visualstudiohacks.com/articles/visual-studio-net-platform-target解釋/)。正如第4項中的competent_tech所建議的那樣,使用「Target CPU」的「x86」設置重新編譯.NET位,並查看它是否能夠正常工作。 – rskar 2012-08-07 20:19:55

+0

@JonSeigel:cliconfig是SQL Server客戶端網絡實用程序。當您沒有在客戶端計算機上安裝SQL Server工具時,它用於配置客戶端連接。 – 2012-08-07 20:20:55

相關問題