Я запускаю клиент-серверное приложение в C# Visual Studio для Ma c версии 8.5.4 (сборка 12), а также GUI, реализованное с использованием GTK. GUI отображает список событий соревнований по плаванию с количеством участников для каждого события.
Когда я нажимаю кнопку, которая назначает данного участника, он обновляет список в каждом подключенном пользователе GUI (с помощью наблюдателя), даже для клиента, который нажал кнопку, но когда я нажимаю ее снова (с того же клиента, что и раньше), с другими входами, происходит сбой только для клиента (даже если сервер отправил обновленный список обратно), который нажал кнопку и GUI зависает, но другие подключенные клиенты GUI обновляются отлично.
Вот ошибка:
Ошибка чтения System.Runtime.Serialization.SerializationException: двоичный поток '255' не содержит допустимый BinaryHeader. Возможные причины: неверное изменение потока или версии объекта между сериализацией и десериализацией. в System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run () [0x00116] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 /mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryparser.cs:181 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (обработчик System.Runtime.Remoting.Messaging.HeaderHandler, System. -osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / referenceource / mscorlib / system / runtime / serialization / formatters / binary / binaryobjectreader.cs: 174 в System.Runtime.Serialization.Formatters .Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHan обработчик dler, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) [0x00099] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external /bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs:197 в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO Сценарий mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / referenceource / mscorlib / system / runtime / serialization / formatters / binary / binaryformatter.cs: 173 в System.Runtime.Serialization.Formatters.Binary. BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.Head обработчик erHandler, System.Boolean fCheck) [0x00000] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / Referenceource / mscorlib /system/runtime/serialization/formatters/binary/binaryformatter.cs:118 в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [ 0x00000] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / referenceource / mscorlib / system / runtime / сериализация / форматтеры / binary / binaryformatter.cs: 149 в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO. Stream serializationStream) [0x00000] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / referencesource / mscorlib / system / runtime / serialization / formatters / binary / binaryformatter.cs: 111 в Client.serviceProxy.ServiceProxy.run () [0x00008] в /Users/andreivaran/Projects/ConcursInotSocket/Client/ServiceProxy/ServiceProxy.cs:229 Ошибка чтения System.Runtime.Serialization .SerializationException: входной поток не является допустимым двоичным форматом. Начальное содержание (в байтах): 01-00-00-00-01-00-00-00-00-00-00-0 C -02-00-00-00 ... at System .Runtime.Serialization.Formatters.Binary.SerializationHeaderRecord.Read (System.Runtime.Serialization.Formatters.Binary .__ BinaryParser input) [0x00081] в / Users / builder / jenkins / рабочая область / build-package-osx-mono / 2019-10 /external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binarycommonclasses.cs:471 в System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadSerializationHeaderRader [0x00006] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / referenceource / mscorlib / system / runtime / serialization / formatters /binary/binaryparser.cs:386 в System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run () [0x00008] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / external / bockbuild / строит / моно-x64 / MCS / класс / referencesource / mscorlib /system/runtime/serialization/formatters/binary/binaryparser.cs:111 в System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (обработчик System.Runtime.Remoting.Messaging.HeaderHandler, System.Runtime.Serialization.Formatters. Binary .__ BinaryParser serParser, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) [0x00069] в / Users / builder / jenkins / workspace / build-package-osx-10-mon /external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs:174 в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (система .IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler обработчик, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage методCallMessage worksinks / 0/09999] / jens buildpace / jens buildpace / jens buildpace / jens buildpace / jens buildpace / наращивание пакет-OSX-моно / 2019-10 /external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs:197 в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System .IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler обработчик, System.Boolean fCheck, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) [0x00000] в / Users / builder / jenkins / workspace / build-package osx-mono / 2019-10 / external / bockbuild / builds / mono-x64 / mcs / class / referenceource / mscorlib / system / runtime / serialization / formatters / binary / binaryformatter.cs: 173 в System.Runtime.Serialization.Formatters. Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler, System.Boolean fCheck) [0x00000] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / внешний / bockbuild / сборки / моно-64 / MCS / класс / referencesource / mscorlib / система / выполнения / сериализации / formatters / binary / binaryformatter.cs: 118 в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x00000] в / Users / builder /jenkins/workspace/build-package-osx-mono/2019-10/external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatter.cs:149 в системе. Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) [0x00000] в / Users / builder / jenkins / workspace / build-package-osx-mono / 2019-10 / внешний / bockbuild / builds / mono-x64 / mcs / class / referenceource / mscorlib / system / runtime / serialization / formatters / binary / binaryformatter.cs: 111 в Client.serviceProxy.ServiceProxy.run () [0x00008] в / Users / andreivaran / Projects / ConcursInotSocket / Client / ServiceProxy / ServiceProxy.cs: 229
Это говорит об ошибке из этой части кода
private void handleUpdate(UpdateResponse update)
{
if (update is AssignResponse)
{
AssignResponse assignResponse = (AssignResponse)update;
UpdateListDTO updateListDTO = assignResponse;
Console.WriteLine("Service proxy");
try{
client.notifyEvent(updateListDTO);
}
catch (ServiceExceptions e){
Console.WriteLine(e.StackTrace);
}
}
}
public virtual void run(){
while (!finished){
try{
object response = formatter.Deserialize(stream); //line 229
Console.WriteLine("response received " + response);
if (response is UpdateResponse){
handleUpdate((UpdateResponse)response);
}
else{
lock (responses){
responses.Enqueue((Response)response);
}
_waitHandle.Set();
}
}
catch (Exception e){
Console.WriteLine("Reading error " + e);
}
}
}
Чтобы назначить участника, я отправляю DTO, который содержит ( имя участника, тип и продолжительность события) и я получаю OkResponse и AssignResponse (который содержит UpdateListDTO ) для клиента, который нажал кнопку, и AssignResponse для других подключенных клиентов.
Также во второй раз я не получаю никакого ответа, даже OkResponse. Что означает, что в потоке что-то есть?