LINUX.ORG.RU

При втором обращении к методу объекта http-запрос рвётся

 ,


0

2

Есть объект на сервере(«координатор»), обрабатывающий запросы от клиента(регистрация, авторизация etc.). Он является полем большего объекта, который непосредственно только запускает HttpListener и парсит запрос. Почему-то таким образом координатор обрабатывает только 1 запрос(не важно, какой, проверял) - на втором сразу же, до начала выполнения метода в вызвавшем потоке вызывается коллбек с параметром состояния запроса «false» и сообщением «Запрос был прерван: Запрос отменен.», а потом в потоке координатора всё-таки выполняется требуемое действие и возвращается положительный результат, но уже никуда не приходит. Не могу понять, с чем это вообще м.б. связано? При втором вызове метода выбрасывается исключение System.Net.WebException. Методы вроде таких:

        public void Register(string nickName, string email, Action<bool, string> callback)
        {
            string convertedResponse;
            var restoredToken = Crypto.Sha256Hex(Crypto.UTF8StringToBytes("Email", email), Crypto.Sha256UTF8("Password", FakePassword));
            if (_database.IsEmailExists(email))
            {
                convertedResponse = JsonConvert.SerializeObject(new RegisterResponse() { Code = CodeEnum.UserAlreadyExists.ToString(), Message = "User with same email is already exists" }, JsonSerializerSettingsContainer.AutoSimple);
                callback(true, convertedResponse);
                return;
            }
            if (_database.IsNameExists(nickName))
            {
                convertedResponse = JsonConvert.SerializeObject(new RegisterResponse() { Code = CodeEnum.UserAlreadyExists.ToString(), Message = "User with same nick is already exists" }, JsonSerializerSettingsContainer.AutoSimple);
                callback(true, convertedResponse);
                return;
            }
            var userId = _database.RegisterUser(email, nickName, restoredToken);
            _database.TrySaveToken(userId, restoredToken);
            convertedResponse = JsonConvert.SerializeObject(new RegisterResponse() { Code = CodeEnum.Ok.ToString(), Message = "Successfully registered", Token = restoredToken }, JsonSerializerSettingsContainer.AutoSimple);
            callback(true, convertedResponse);
        }

Вызываются такими обработчиками:

private class RegistrationRequestHandler : RequestHandler
        {
            public RegistrationRequestHandler(HttpListenerRequest request)
                : base(request)
            { }
            public override void HandleRequest()
            {
                _coordinator.Register(_requestQueryString["name"], _requestQueryString["email"], ResponseCallback);
            }
        }

В исходном классе ничего сетевого не было, он просто добавляется параметром в сетевую обёртку.

★★★★

на винфак?

anonymous ()
Ответ на: комментарий от anonymous

на винфак?

Евгений Ваганыч, когда вы залогинитесь?

anonymous ()

Что в ексепшене написано?

anonymous ()
Ответ на: комментарий от anonymous

Надо бы английскую студию поставить. А то получается негуглимая хрень вроде «Запрос был прерван: Запрос отменен.». Оказалось, в параметрах запроса надо было поставить keepAlive=false

wingear ★★★★ ()
Ответ на: комментарий от anonymous

А линукс тут при том, что потом это всё, перекомпиленное mono, будет крутиться на местном сервере

wingear ★★★★ ()
Ответ на: комментарий от wingear

Надо бы английскую студию поставить

Фигасе, я и не знал что русская бывает.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.