AccessViolationException при размещении FireBirdSql в службе WCF - PullRequest
2 голосов
/ 17 мая 2011

Я размещаю службу WCF как управляемую службу Windows и продолжаю получать исключение AccessViolationException, когда потребитель / клиент вызывает его метод во второй, третий или четвертый раз. Сбои являются совершенно случайными, поэтому иногда это может не произойти, пока не произойдет еще несколько вызовов.

Вот код с подсветкой синтаксиса для удобства чтения: http://pastebin.com/Z3Z06944

См. Комментарии к закрытому методу "CheckUser", поскольку именно здесь может происходить исключение.

Ответы [ 3 ]

0 голосов
/ 18 мая 2011

В вашем коде вы явно не закрываете соединение.

Поскольку вы используете оператор using, оно будет закрыто, но возможна задержка.

Если существует максимальное числосоединений и запросы приходят быстро, вы можете получить исключение, если будет достигнуто максимальное число.

Это объясняет случайный характер ошибок.

Редактировать

Ваш код уязвим к атаке внедрения SQL-сервера, вы должны это исправить.

Ваша проблема может быть ошибкой блокировки, есть ли у вас индекс пользователя и пароль, если нетделать сканирование таблицы, которая блокирует таблицу.

0 голосов
/ 13 декабря 2011

Я думаю, что существуют лучшие системы поставщиков ролей / членства, но на основе вашего кода вы можете улучшить это с помощью 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;
    }

ЕстьВеликий день!

0 голосов
/ 18 мая 2011

Я посмотрел код, который вы разместили, и не вижу, какое отношение это имеет к WCF.Вы говорите, что комментирование кода для вызова FireBirdSql (FbCommand?) И AV исчезает.Очевидно, проблема в FireBirdSql.Попробуйте выполнить обновление до последней версии или отправьте отчет о сбое разработчикам.AV (нарушение доступа) обычно возникает с проблемой в уровне взаимодействия неуправляемого кода p / invoke.Это звучит как некая проблема многопоточности, которая возникает в сценарии WCF.

(обновление: отредактированный заголовок вопроса OP для включения ссылки на FbSQL)

...