Я пытаюсь использовать преимущества асинхронных сокетов в С# с сериализацией/десериализацией с помощью 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 в сокете.