我在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