Жизнь соединения TCP

Я решил эту проблему. Проблема заключается в настройке службы идентификации. Мне нужно было использовать AddIdentity<IdentityUser, IdentityRole>() вместо AddDefaultIdentity<IdentityUser>()

Я изменил

// Identity Stuff
services.AddDefaultIdentity<IdentityUser>()
    .AddRoles<IdentityRole>()
    .AddDefaultTokenProviders()
    .AddEntityFrameworkStores<ApplicationDbContext>();

на

// Identity Stuff
services.AddIdentity<IdentityUser, IdentityRole>()
    .AddRoles<IdentityRole>()
    .AddDefaultTokenProviders()
    .AddEntityFrameworkStores<ApplicationDbContext>();

И это сработало.

22
задан Robert 1 October 2008 в 17:08
поделиться

6 ответов

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

Обычно я шел для прикладного уровня активный подход, хотя это обычно имеет, потому что это было в клиентской спецификации, таким образом, я должен был сделать это. Но просто отправьте некоторую короткую часть данных каждую минуту или два, к которому Вы ожидаете своего рода подтверждение.

, Считаете ли Вы один отказ подтвердить как соединение, переставшее работать, ваше дело. Обычно это - то, что я сделал в прошлом, хотя был случай, я имел, ожидают трех неудавшихся ответов подряд для отбрасывания соединения, потому что приложение в другом конце соединения было чрезвычайно облуплено об ответе к, "Вы там?" запросы.

, Если связь прерывается, который в какой-то момент она, вероятно, будет, даже с машинами в той же сети, затем просто попытка восстановить его. Если это приводит количество раз набора к сбою затем, у Вас есть проблема. Если Ваша связь постоянно прерывается после того, как она была соединена некоторое время с другой стороны, у Вас есть проблема. Скорее всего, в обоих случаях это - вероятно, некоторая сетевая проблема, а не Ваш код, или возможно проблема со стеком TCP/IP на Вашей машине (был известен: Я встретился с проблемами с этим на старой версии QNX - он просто случайным образом упадет). Сказав, что у Вас могла бы быть программная проблема, и единственный способ знать наверняка состоит в том, чтобы часто присоединять отладчик, или получить некоторый вход там. Например, если можно всегда соединяться успешно, но через некоторое время Вы прекращаете получать ACKs, даже после того, как снова соединяются, затем возможно, Ваш сервер заходит в тупик или застревает в цикле или чем-то.

то, Что действительно полезно, должно настроить серию продолжительных тестов под множеством условий загрузки, от просто отправки поддержания Вы там? запросы/ack и ответы, к абсолютным ударам сервера. Это будет обычно вселять Вам больше веры о Ваших компонентах программного обеспечения и может быть действительно полезно в вытряхивании некоторых действительно странных проблем, которые не обязательно вызовут проблему с Вашим соединением, хотя они могли бы привести к проблемам с транзакциями, происходящими. Например, я однажды писал телекоммуникационный сервер приложений, который предоставил услуги, такие как преобразование номеров, и мы просто оставим его работающий в течение многих дней за один раз. Вещь состояла в том, что, когда суббота пришла, в течение целого дня, она отклонит каждый запрос вызова, который вошел, который составил миллионы вызовов, и мы понятия не имели почему. Это оказалось из-за единственной опечатки в некотором коде преобразования даты, который только вызвал проблему по субботам.

Hope, которая помогает.

18
ответ дан 29 November 2019 в 04:37
поделиться

Я думаю, что самая важная идея здесь является теорией по сравнению с практикой.

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

новая теория состоит в том, что большинство версий ОС включило активный таймер. Это означает, что соединения продлятся навсегда, пока система на другом конце отвечает на случайный обмен уровня TCP.

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

Два действительно хороших примера: удаленный клиент использует DHCP, арендный договор истекает, и изменения IP-адреса.

Другим примером являются брандмауэры, которые, кажется, все больше интеллектуальны, и могут определить активный трафик по сравнению с реальными данными и закрыть соединения на основе любых критериев высокого уровня, особенно время простоя.

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

13
ответ дан 29 November 2019 в 04:37
поделиться

Это не должно действительно иметь значения, необходимо разработать код, чтобы автоматически снова соединиться, если это - желаемое поведение.

7
ответ дан 29 November 2019 в 04:37
поделиться

Действительно нет никакого способа сказать. Нет ничего свойственного к TCP, который заставил бы соединение просто отбрасывать после определенного количества времени. У кого-то на надежном соединении могли быть годы времени работы, в то время как кому-то на другом соединении придется снова соединяться каждые 5 минут. Нет никакого способа сказать или даже предположить.

6
ответ дан 29 November 2019 в 04:37
поделиться

Выберите значение. Одно отбрасывание каждый час прекрасно, вероятно. Десять неожиданных отбрасываний соединения за 5 минут, вероятно, указывают на проблему.

соединения TCP будут обычно длиться приблизительно два часа без любого трафика. Любой конец может отправить активные пакеты, которые являются, я думаю, просто ACK на последнем полученном пакете. Это может обычно устанавливаться на сокет или по умолчанию на каждом соединении TCP.

активный прикладной уровень также возможен. Поскольку telnet разрабатывает протокол как FTP, SMTP, POP или IMAP что-то как передающий возврат, новая строка и возвращение командной строки.

-3
ответ дан 29 November 2019 в 04:37
поделиться

Вам будут нужны некоторые данные, пробегающиеся через соединение периодически для поддержания его - многие, ОС или брандмауэры отбросит неактивное соединение.

2
ответ дан 29 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: