Есть объект на сервере(«координатор»), обрабатывающий запросы от клиента(регистрация, авторизация 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);
}
}
В исходном классе ничего сетевого не было, он просто добавляется параметром в сетевую обёртку.