|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Всем привет, хочу при запуске AspCore 2.1 проекта проинициализировать некоторые данные - в частности добавить роли. Делаю это так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
в ConfigureServices Код: c# 1. 2. 3.
в Configure Код: c# 1.
Когда код доходит до RoleManager.RoleExistsAsync(item) я получаю ошибку ObjectDisposedException, то есть в конструкторе RoleManager еще не Disposed, а пока дойдет до RoleManager.RoleExistsAsync сборщик мусора его уже забирает, хотя не должен-я ведь держу на него ссылку в свойстве protected private RoleManager. Почему сборщик все равно забирает RoleManager? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:34 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Сборщик-то тут причем? ObjectDisposedException возникает когда кто-то вызвал Dispose, а не когда сборщик прошел ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:37 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subто есть в конструкторе RoleManager еще не Disposed, а пока дойдет до RoleManager.RoleExistsAsyncЗначит Initialize вызывается уже тогда, когда скоуп для RoleManager уже закончился. Показывай код инстанцирования и использования RolesHelper ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:40 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro, кроме кода, который я привел - больше нигде дополнительной логики по работе с RolesHelper я не использую. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
Соответственно инстанциирую и использую на строке Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:53 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subв Configure Код: c# 1.
Не скажу на 100% что дело в этом, но для начала стоит поменять вот так: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:58 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_sub Код: c# 1.
а ничего что в Core ушли от ролевой аутентификации к claim-based? Т. Е. что то типа такого: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:09 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Сделай Initialize асинхронным и вызывай через await Естественно RoleManager умирает раньше, чем закончится выполнение Initialize, потому что ты его не ожидаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:14 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.ProСделай Initialize асинхронным и вызывай через await Естественно RoleManager умирает раньше, чем закончится выполнение Initialize, потому что ты его не ожидаешь Ну да, я выше уже написал, что Wait() к вызову надо добавить. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:16 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
и вообще - наличиеvb_sub Код: c# 1.
признак того, что создаешь себе проблемы на ровном месте ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:16 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatНу да, я выше уже написал, что Wait() к вызову надо добавить.лучше сделать как положено ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:18 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatНу да, я выше уже написал, что Wait() к вызову надо добавить. Ну ёмаё.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:20 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Proлучше сделать как положено Через await его не вызовешь, потому что для этого надо делать асинхронным сам Configure, а это, afaik, asp.net еще не умеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:23 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatЧерез await его не вызовешь, потому что для этого надо делать асинхронным сам Configure, а это, afaik, asp.net еще не умеет.посмотри в приведенный код vb_sub Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:25 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Proи вообще - наличиеvb_sub Код: c# 1.
признак того, что создаешь себе проблемы на ровном месте Изначально Initialize был Async Task и было Код: c# 1.
-ошибка аналогичная, я сначала подумал, что await как-то неправильно дожидается ход выполнения и начал раскручивать в синхронную версию, но из-за того, что у RoleManager есть только асинхронная версия RoleExistsAsync, пришлось остановиться на async void. Собственно проблема не в асинхронности- при обоих вариантах RoleManager уже задиспозен. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:34 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Petro123vb_sub Код: c# 1.
а ничего что в Core ушли от ролевой аутентификации к claim-based? Т. Е. что то типа такого: Код: c# 1. 2. 3. 4.
Чем claim-based лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:43 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Значит надо создать скоуп, потому что лайвтайм RoleManager по идее Scoped ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:47 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subЧем claim-based лучше? 1. Полная поддержка из коробки 2. Комбинирование с соц.сетями и SSO. 3. Шире чем роли, т.к. Роль это просто ключ тире значение в claim. .... Выше константу для роли видел? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:49 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.ProЗначит надо создать скоуп, потому что лайвтайм RoleManager по идее Scoped Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:49 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro, скоуп дает аналогичную ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:50 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Я пробовал с AddScoped ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:50 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
пробуй CreateScope ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:51 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro Код: c# 1.
Оно не сработает. Configure это специальный метод, который вызывается извне, фреймворком, и тот требует, чтобы он был объявлен именно как "public void". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:51 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatОно не сработает.ты сам пробовал, чтобы это утверждать? fkthatтот требуетпусть требует, надо бы знать, что async - инструкция для компилятора, а не часть сигнатуры ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:54 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Все получилось, спасибо. Только странно, из-за чего так пришлось велосипедить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:55 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_sub, Ну и самое главное, можно войти не имея роль, но имея разрешение(identity). Например публичный раздел сайта для рекламщиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:55 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatShocker.Pro Код: c# 1.
Оно не сработает. Configure это специальный метод, который вызывается извне, фреймворком, и тот требует, чтобы он был объявлен именно как "public void". Ты не прав, public async void Configure работает, по крайней мере в core 2.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:55 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subТолько странно, из-за чего так пришлось велосипедить?Из-за того, что RoleManager Scoped, а самого скоупа нет. Не очень понятно, правда, почему ObjectDisposedException, должно было просто ругаться на неверное получение сервиса... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:57 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subпо крайней мере в core 2.1в 2.0 тоже, ниже не пробовал ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:57 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Petro123, ограничение доступа к контроллерам тоже поддеживается с claim-based ([Authorize(Roles = "Administrator")])? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:58 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subPetro123, ограничение доступа к контроллерам тоже поддеживается с claim-based ([Authorize(Roles = "Administrator")])? Ты не понял. Роль пишешь в claim myRoles А потом: Код: c# 1.
Т.е роль становится тьфу. Можно по возрасту пускать. Роль Гость не особо нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:11 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Provb_subпо крайней мере в core 2.1в 2.0 тоже, ниже не пробовал Я попробовал "public async void Configure" - и оно, вроде как, действительно его сжирает нормально, но, я все еще совсем не уверен, что оно его действительно вызовет как надо. Все-таки в офдоке про это ни слова не написано - написано только чотко "public vioid Configure". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:16 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatЯ попробовал "public async void Configure" - и оно, вроде как, действительно его сжирает нормально, но, я все еще совсем не уверен, что оно его действительно вызовет как надо. Все-таки в офдоке про это ни слова не написано - написано только чотко "public vioid Configure".Повторю, вызывающей стороне пофиг на async - это всего лишь инструкция компилятора, сигнатура остается той же. Надо просто осознавать, что сервер уже запустится и будет обслуживать запросы, пока Configure еще не завершен. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:23 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.ProНадо просто осознавать, что сервер уже запустится и будет обслуживать запросы, пока Configure еще не завершен. Как прелестно. Сервер будет обслуживать запросы до того, как все middleware будут настроены. Привет, дебаггер. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:39 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatКак прелестно. Сервер будет обслуживать запросы до того, как все middleware будут настроены. Привет, дебаггер.Все, что должно быть обязательно настроено до запуска, надо делать синхронно. В принципе, автору можно было сделать и синхронный вызов асинхронных функций RoleManager, если этот момент для него принципиален ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:45 |
|
|
start [/forum/topic.php?all=1&fid=18&tid=1355075]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 267ms |
total: | 415ms |
0 / 0 |