【问题标题】:AccessViolationException when hosting FireBirdSql in a WCF Service在 WCF 服务中托管 FireBirdSql 时出现 AccessViolationException
【发布时间】:2011-05-17 19:59:54
【问题描述】:

我将 WCF 服务作为托管 Windows 服务托管,当消费者/客户端第二次、第三次或第四次调用其方法时,我不断收到 AccessViolationException。崩溃是完全随机的,所以有时它可能要等到以后再调用几次才会崩溃。

为了便于阅读,这里是带有语法高亮的代码:http://pastebin.com/Z3Z06944

查看私有方法“CheckUser”周围的 cmets,因为这可能是发生异常的地方。

【问题讨论】:

    标签: c# wcf firebird access-violation integer-overflow


    【解决方案1】:

    我查看了您发布的代码,但看不出这与 WCF 有什么关系。你说注释掉调用 FireBirdSql (FbCommand?) 的代码并且 AV 消失了。显然问题出在 FireBirdSql 上。尝试更新到最新版本,或将崩溃报告发送给开发人员。 AV(访问冲突)通常在 p/invoke 非托管代码互操作层出现问题时发生。这听起来像是某种多线程问题,会在 WCF 场景中出现。

    (更新:编辑 OP 问题标题以包含 FbS​​QL 参考)

    【讨论】:

    • AddUser() 方法还包含一个我没有注释掉的 FbCommand 对象。当我注释掉 CheckUser() 中的两行并返回一个虚拟值时,不再有崩溃。另外,我已经在使用最新版本的 Firebird 嵌入式 SQL 数据库了。
    • @dc200 因此,当您在 checkuser 中注释掉一些 FBsql 代码时,它会停止崩溃。我还是不明白你的意思。这是FBSql。我会花钱买它。
    • @dec200 您接受了我的回答 - 是否愿意更新问题,以便其他 FB 用户可以从相同的修复中受益?
    【解决方案2】:

    在您的代码中,您没有明确关闭连接。

    由于您使用的是 using 语句,它将被关闭,但可能会有延迟。

    如果有最大连接数并且请求很快到来,如果达到最大连接数,您可能会收到异常。

    这可以解释错误的随机性。

    编辑

    您的代码容易受到 sql server 注入攻击,您应该修复它。

    您的问题可能是锁定错误,您是否有用户和密码索引,如果没有,您正在执行表扫描,这会锁定表。

    【讨论】:

    • 关闭连接是我尝试的第一件事。问题依然存在。
    【解决方案3】:

    我认为有更好的角色/成员资格提供程序系统,但根据您的代码,您可以使用 TRY/FINALLY 结构和 using 语句来改进这一点。

        public Boolean AddUser(string user, string pass)
        {
            using (FbConnection con = new FbConnection(ConfigurationManager.ConnectionStrings["DBi"].ConnectionString.ToString()))
            {
                using (FbCommand fbComm = new FbCommand("INSERT INTO users (name, pass) VALUES ('" + user + "','" + pass + "')", con))
                {
                    fbComm.Connection.Open();
                    if (CheckUser(user, pass, con) == 0)                        
                    {
                        fbComm.ExecuteNonQuery();
                        return true;
                    }
                    fbComm.Connection.Close();
                }
            }
            return false;
        }
    

    祝你有美好的一天!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      相关资源
      最近更新 更多