Василий Банников, проблема в том, что там нечего обрабатывать, не в нем происходит исключение, а в него (событие) передается просто exception. Падает явно в том месте, потому что лог пишет из viewmodel'и. И что странно, так это 53 (!) одинаковых ошибки за раз.
2021-05-24 18:05:55,944 [53] ERROR Unicorn.Client.ViewModels.ConnectionViewModel - Подключение закрыто
System.Net.WebSockets.WebSocketException (0x80004005): The remote party closed the WebSocket connection without completing the close handshake.
---> System.IO.IOException: Unable to read data from the transport connection: Программа на вашем хост-компьютере разорвала установленное подключение..
---> System.Net.Sockets.SocketException (10053): Программа на вашем хост-компьютере разорвала установленное подключение.
--- End of inner exception stack trace ---
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
at System.Net.Security.SslStream.ReadAsyncInternal[TIOAdapter](TIOAdapter adapter, Memory`1 buffer)
at System.Net.Http.HttpConnection.ReadBufferedAsyncCore(Memory`1 destination)
at System.Net.Http.HttpConnection.RawConnectionStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken)
at System.Net.WebSockets.ManagedWebSocket.EnsureBufferContainsAsync(Int32 minimumRequiredBytes, CancellationToken cancellationToken, Boolean throwOnPrematureClosure)
at System.Net.WebSockets.ManagedWebSocket.ReceiveAsyncPrivate[TWebSocketReceiveResultGetter,TWebSocketReceiveResult](Memory`1 payloadBuffer, CancellationToken cancellationToken, TWebSocketReceiveResultGetter resultGetter)
at System.Net.WebSockets.ManagedWebSocket.ReceiveAsyncPrivate[TWebSocketReceiveResultGetter,TWebSocketReceiveResult](Memory`1 payloadBuffer, CancellationToken cancellationToken, TWebSocketReceiveResultGetter resultGetter)
at Microsoft.AspNetCore.Http.Connections.Client.Internal.WebSocketsTransport.StartReceiving(WebSocket socket)
at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()
at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
at System.IO.Pipelines.Pipe.GetReadAsyncResult()
at Microsoft.AspNetCore.SignalR.Client.HubConnection.ReceiveLoop(ConnectionState connectionState)
1. Исключение и нельзя перехватить (либо я не туда смотрю). Вылетает в событии, судя по логам, в событии отключения от сервера, куда и приходит этот Exception аргументом.
2. Раньше таких проблем у них не было, тестил на локалхосте и через ngrok. Рестарт сервера исключен, потому что в таком случае сигнал на клиенте автоматически переподключается сам.
Всё же грешу на его интернет и/или серверный комп.
Ну... Вы упустили главную мысль, правда ее и не было в вашем ответе. Array - статический класс, Array.Sort - его статический метод.
List.Sort - метод, принадлежащий классу List.
Поэтому в первом случае нужно передать в метод массив для сортировки.
То, что вы хотите сделать - называется ViewModel. Засуньте все нужные св-ва в один класс и делайте привязку к ним без проблем, в интернете по запросу MVVM Example будет тонны и миллиарды примеров
embiid, Code First? DB First? Еще раз повторю предыдущего отвечающего: "Мы вам не телепаты, код таблиц в студию + сам код удаления". NULL присваивается для того, чтобы не дропнуть все данные из таблицы.
Например: был у вас пользователь, у него были заказы. Вы удалили пользователя и удалились заказы. А как быть со сбором данных? Доходов и расходов например? Для этого обычно НЕ УДАЛЯЮТ ВООБЩЕ данные из базы, либо присваивают NULL в связанной таблице, чтобы заказы удаленного клиента вы не потеряли и всегда могли их, в случае чего, учитывать в статистике или другом месте.
Я обычно делаю так: в таблицах есть поле "isDeleted" (bool). Если 1 (true) = данные не учитываются в выборке (SELECT * FROM table WHERE isDeleted = 0). Соответственно данные не удаляются из базы вообще. Если только напрямую руками. И всё равно всегда оставляю для себя возможность сохранить данные при случайном удалении и не делаю каскадное удаление данных в таблицах.
Veros Game, на самом деле даже очень. Вы сами рассказали как нужно сделать, я с юнити не работал вообще, но смею предположить, что когда у дерева кончается ХП (жизни, как удобнее), то вы просто деспавните его (или как у вас это называется? Убираете в общем) и добавляете в инвентарь его.
Frayl, Для большинства и Ваш вопрос покажется глупым, но этого вам никто не говорит. Описывайте все тонкости вашего кода, никто не знает от куда вы взяли эту переменную, что в ней находится и прочее.
Идеи и не было, чтобы через сигнал гнать потоки данных)
Хотел использовать его в кач-ве только сервера-нотификаций, чтобы оповестить клиента, что нужно получить новые данные.
Евгений Глебов, Причем тут старый пост? Мне был интересен момент работы. Не несите чушь, кто в нынешних реалиях будет использовать сокеты, чтобы делать синхронизацию с базой?