Я пытаюсь использовать преимущества асинхронных сокетов в C # при сериализации / десериализации с помощью BinaryFormatter, но сталкиваюсь с несколькими проблемами.В основном я получаю сообщение об ошибке:
No map for object 1953724755
при попытке десериализации сетевого потока.
Я пытался перейти на синхронный сокет, и это, кажется, работает нормально, но при использовании асинхронного (с BeginRecieve, EndRecieve и т. Д.) Я все еще получаю эту ошибку.
Вот код, который я десериализирую:
private void BeginDictionaryRecieve(IAsyncResult ar)
{
Stream socketStream = new NetworkStream(socketState.workSocket);
IFormatter dataFormatter = new BinaryFormatter();
socketState.workSocket.EndReceive(ar);
List<string> rackthatWasClicked = (List<string>)
dataFormatter.Deserialize(socketStream);
this.recievedListForRackDisplay = rackthatWasClicked;
OnDataRecieved.Invoke();
socketState.workSocket.BeginReceive(socketState.buffer, 0, StateObject.BufferSize, 0,new AsyncCallback(BeginDictionaryRecieve), socketState);
}
А вот код сериализации (синхронно):
IPAddress ipAdd = IPAddress.Parse("127.0.0.1");
TcpClient myClient = new TcpClient();
myClient.Connect(ipAdd, 8002);
Stream clientStream = myClient.GetStream();
IFormatter f = new BinaryFormatter();
f.Serialize(clientStream, ShelfDataToSend);
clientStream.Dispose();
myClient.Dispose();
Я должен отметить, что я используюBinaryFormatter, потому что я не могу найти способ сериализации объекта, кроме строки, с обычными операциями .Write на сокете.