C# Can';似乎无法让Firebird连接到本地IP地址

C# Can';似乎无法让Firebird连接到本地IP地址,c#,.net,networking,windows-7,firebird,C#,.net,Networking,Windows 7,Firebird,我在Firebird和.net的几个客户端网站上遇到了一个奇怪的问题。我正在使用firebird 2.1和visual studio的DDEX提供程序,我在c#中工作。具体来说,我得到了一个非常普遍的例外情况,如下所示: Exception on trying to connect to firebird DB: FirebirdSql.Data.FirebirdClient.FbException: Unable to complete network request to host "10.

我在Firebird和.net的几个客户端网站上遇到了一个奇怪的问题。我正在使用firebird 2.1和visual studio的DDEX提供程序,我在c#中工作。具体来说,我得到了一个非常普遍的例外情况,如下所示:

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):


Windows 7 x64计算机,运行service pack 1。我已经将firebird配置为使用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防火墙 -已关闭microsoft安全基本功能(实时保护) -同时关闭防火墙和MSE -确保将用户帐户控件设置为最小值 -已从网络配置中禁用IPV6

据我所知,网络设置为不过滤任何类型的内部网络流量。我可以ping本地系统。我有一个简单的程序,它使用c#的TcpClient类打开一个到系统的套接字,它与ip和端口连接良好,我认为这意味着套接字连接已经建立,这“似乎”表明它可以工作

请注意,我已经尽我所能找到了除microsoft security essensial和内置防火墙之外安装的任何其他防病毒或防火墙

完全不知所措,请提些建议好吗

案例2(网络2):


Windows 7 x32计算机,无SP1。我已将firebird端口配置为3050。我甚至无法使用环回地址(127.0.0.1)连接到这台机器。我尝试过静态、非静态、禁用IPV6、禁用防火墙和禁用MSE。此计算机的IP:10.200.81.179掩码255.255.255.192

更新-在将网络上的所有三台机器更改为使用静态IP地址后,这台机器现在可以连接到自身,但出现了一个新问题,如下所示

再一次,我完全不知道有什么想法和建议,好吗

更多信息: 我已经设置了一个疯狂的简单测试程序,它有3个文本框,我可以填充这些文本框来连接到数据库,我已经确认它在firebird运行时确实可以正常工作,而在没有运行时,它会生成与我在clinet机器上得到的完全相同的错误

例如,您启动firebird服务,运行连接,成功,关闭服务,运行连接,以及上面的异常,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;
        }
显而易见的答案是将服务器放在计算机B上,然后继续使用,但它在逻辑上不起作用,因为这台计算机是一台非常糟糕的机器,而且很少开机。请注意,这三个都在运行windows 7


决议: 在上面的案例2中,一些计算机无法与其他计算机通信,涉及3台计算机,结果是网络上有两台同名计算机。我最好的猜测是windows或firebird,或两者都依赖于通讯的名称,而重复的名称阻止了通讯


在案例1中,我们使用的解决方案只是将机器保持为静态IP地址。不知道为什么这是必要的,但它确实解决了问题。此外,此网络上还有另一台计算机也是windows 7,如果没有静态IP地址,将无法正确连接

根据您评论中的信息,我认为您的问题可能是以下之一:

  • 本地windows防火墙或其他防火墙软件(例如防病毒软件)正在阻止连接。您通常必须手动添加规则或异常,以允许Firebird正在侦听的端口输入通信量
  • Firebird没有侦听该特定接口(如果您没有更改配置,则不太可能),请检查Firebird.conf文件的
    RemoteBindAddress
#
#允许将传入连接绑定到的IP地址
#特定网卡。它允许拒绝传入连接
#通过除此之外的任何其他网络接口。默认情况下,
#允许从任何可用网络接口进行连接。
#如果您使用的是Classic Server,则此设置仅适用于Windows。
#在Linux、BSD或Mac OS X下,与经典服务器一起使用xinetd或launchd
#配置文件(绑定参数)
#
#类型:字符串
#
RemoteBindAddress=127.0.0.1
您可以使用
netstat-a
命令检查Firebird是否正在端口监听

此输出表示Firebird正在侦听所有接口:

  TCP    0.0.0.0:3050           jacastillo:0           LISTENING
而这是它在127.0.0.1中收听a的时候

  TCP    127.0.0.1:3050         jacastillo:0           LISTENING

3050是默认端口,请检查您正在侦听的正确端口

好的,因此在案例2中,问题是网络上有两台同名计算机

由于问题的简单性和由此产生的奇怪症状,我现在有点不知所措

我不知道这是怎么回事,也不知道为什么,但现在已经解决了。我将在明天上午检查1号案件
  TCP    127.0.0.1:3050         jacastillo:0           LISTENING