我在Firebird和.net的幾個客戶端網站上遇到了一個奇怪的問題。我正在使用firebird 2.1和用於visual studio的DDEX Provider,並且正在使用c#。 Specificaly我得到一個非常普遍的例外情況如下:似乎無法讓Firebird連接到本地IP地址
Exception on trying to connect to firebird DB:
FirebirdSql.Data.FirebirdClient.FbException: Unable to complete network request to host "10.206.34.177".
---> FirebirdSql.Data.Common.IscException: Exception of type 'FirebirdSql.Data.Common.IscException' was thrown.
at FirebirdSql.Data.Client.Gds.GdsConnection.Connect(String dataSource, Int32 port, Int32 packetSize, Charset charset)
at FirebirdSql.Data.Client.Gds.GdsDatabase.Attach(DatabaseParameterBuffer dpb, String dataSource, Int32 port, String database)
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
--- End of inner exception stack trace ---
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
at FirebirdSql.Data.FirebirdClient.FbConnectionPool.Create()
at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut()
at FirebirdSql.Data.FirebirdClient.FbConnection.Open()
at Seljax.Database.Firebird.DatabaseManager.TryToConnect()
這似乎給我說明網絡問題,可能是一個防火牆或者諸如此類代替財產以後?但我似乎無法找到該塊?
的更多信息(2個不同的情況下):
情況1(網絡1):
視窗7 X64的計算機,運行的服務包1.我已經配置火鳥使用的5013端口,如果我指定本地環回地址(127.0.0.1),它就可以很好地連接。此外,它僅連接本地IP地址(10.206.34.177),當前配置爲satic,網絡掩碼爲255.255.255.192。但是,如果我更改此計算機使用動態IP地址(從DHCP服務器獲取),並嘗試連接到IP(在這種情況下,我得到10.206.34.184掩碼255.255.255.192)我得到上述異常。盡我所知,除了使用靜態IP外,我已將所有配置與DHCP服務器提供的相同。除此之外,我嘗試了以下操作使其可以與動態IP地址配合使用: - 關閉了Windows防火牆 - 關閉了微軟安全實用程序(實時防護) - 關閉了防火牆和MSE - 確保用戶帳戶控制設置爲最低 - 從網絡配置中禁用IPV6
盡我所知,網絡設置爲不過濾任何類型的內部網絡流量。我可以很好地ping通本地系統。我有一個簡單的程序,它使用c#的TcpClient類打開系統的套接字,它連接到ip和端口,我認爲這意味着建立了一個套接字連接,這似乎表明它可以工作。
請注意,我看起來最好,我無法找到任何其他防病毒或防火牆安裝在微軟安全essensial以外,內置防火牆。
Totaly茫然,建議請?
案例2(網絡2):
的Windows 7 X32電腦,沒有SP1。我已經將firebird端口配置爲3050.我甚至無法使用環回地址(127.0.0.1)連接到此機器。我試過靜態,非靜態,禁用IPV6,禁用防火牆和禁用MSE。本機的IP:10.200.81.179掩碼255.255.255.192。
更新 - 這臺機器現在可以連接到自身,改變網絡使用靜態IP地址在所有三個machiens後,但低於
介紹,一個新的問題重新列,完全以在對意見,建議虧損請?
更多信息: 我已經安裝了一個瘋狂的簡單測試程序,它有3個文本框,我可以填充連接到數據庫,並且我已經確認它可以像Firebird一樣運行,並且與沒有運行,它會產生我在clinet機器上發生的完全相同的錯誤。
因此,例如,您啓動firebird服務,運行connect,success,關閉服務,運行connect和上面的異常,並且FbException中的所有其他異常都將與我的機器試圖連接到。
我把所有的代碼設置上點擊一個按鈕,無論如何,以供參考,這將導致異常的代碼是在這裏:
// setup connection
FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
csb.DataSource = firebirdAddress.Text;
csb.Port = Convert.ToInt32(firebirdPort.Text);
csb.Database = firebirdPath.Text;
csb.ServerType = 0;
csb.UserID = "SYSDBA";
csb.Password = "masterkey";
csb.Dialect = 3;
// generate the conneciton object
string connectionString = csb.ToString();
FbConnection connection = new FbConnection(connectionString);
try
{
MessageBox.Show("Trying to connect with string: " + Environment.NewLine + connectionString);
connection.Open();
MessageBox.Show("Firebird connected successfully!");
}
catch (Exception exception)
{
FbException fireException = (FbException) exception;
for (int i = 0; i < fireException.Errors.Count; i++)
{
MessageBox.Show("Class: " + fireException.Errors[i].Class.ToString() + Environment.NewLine +
"Error #" + fireException.Errors[i].Number.ToString() + ": " + fireException.Errors[i].Message + " on line " +
fireException.Errors[i].LineNumber.ToString());
}
MessageBox.Show("Exception caught: " + Environment.NewLine + exception.ToString());
// loop through all inner exceptions
while (exception.InnerException != null)
{
MessageBox.Show("Inner exception: " + Environment.NewLine + exception.InnerException.ToString());
exception = exception.InnerException;
}
}
finally
{
connection.Close();
connection = null;
connectionString = null;
csb = null;
}
不管怎樣,任何建議或信息將非常appricated!
一些更多的信息,已經到了光,如果上述1我能夠成功連接到使用Windows XP的機器及以上的爲入門連接顯示的代碼的計算機。
是Windows做一些奇怪的IP路由?
更新: 的情況下,2的計算機不能夠連接到127個地址通過改變所有的機器在網絡上使用靜態IP地址已被「固定」。然而情況2變得更有趣。 Senario有三臺電腦。三者可以「排序」,因爲它們都設置爲靜態IP。
Details of communication:
Computer A Computer B Computer C
works works doesn't work Computer A
works works doesn't work Computer B
doesn't work works works Computer C
顯而易見的答案將是把在計算機B上的服務器,並用它去,但它好好嘗試一下logisticaly工作,因爲該計算機是一個非常貧窮的機器,並且很少上。請注意,所有三個運行的是Windows 7
分辨率: 以上,其中一些電腦不能跟他人和有參與了3臺機器的情況下2,原來是有2臺電腦使用相同網絡上的名稱。我最好的猜測是windows或firebird,或者兩者都以某種方式依賴於通信的名稱,而重複的名稱則阻止了它。
在案例1中,我們的解決方案僅僅是將機器保持爲靜態IP地址。不知道爲什麼這是乾淨的,但它確實解決了這個問題。此外,此網絡上還有第二臺機器,它也是Windows 7,如果沒有靜態IP地址,將無法正確連接。
你可以從isql連接嗎? – jachguate 2011-03-24 19:16:28
是的,它似乎在機器上非常安全,ISQL工作正常。 – Beau 2011-03-24 19:30:27
其實,這是一個很好的觀點,ISQL不會像.net dll那樣以幾乎相同的方式進行連接?還是它做了一些完全不同的事情? – Beau 2011-03-24 19:31:27