Сейчас я пытаюсь отправить XmlDocument через NetworkStream.
Клиентская сторона: отправка настраиваемого объекта типа User в поток с помощью сериализатора.
XmlSerializer serializer = new XmlSerializer(typeof(User));
XmlWriter writer = new XmlTextWriter(_tcpStream, Encoding.Unicode);
serializer.Serialize(writer, user);
На стороне сервера : Получение потока и загрузка его в документ для дальнейшей обработки.
static XmlElement ReceiveXmlElementFromClient(TcpClient client)
{
Console.WriteLine("Receiving Element from client...");
XmlDocument document = new XmlDocument();
NetworkStream ns = client.GetStream();
Console.WriteLine("Reading buffer.");
byte[] bRead = new byte[client.ReceiveBufferSize];
ns.Read(bRead, 0, client.ReceiveBufferSize);
Stream reader = new MemoryStream(buffer.ToArray());
XmlReader r = new XmlTextReader(reader);
document.Load(r);
// document.Save("test.xml")
Console.WriteLine("Element received.");
return document.DocumentElement;
}
Это вызывает исключение «Root элемент отсутствует».
Однако, когда я помещаю точку останова раньше в функции (хотя и не раньше в программе), она работает, как задумано. Документ может быть сохранен, а также извлечен элемент root, все с правильным форматированием (такое же, как на стороне клиента).
Я нашел этот поток с похожей проблемой в C: Почему установка точки останова заставляет мой код работать? Исходя из того, что я понял (никогда не касался C), проблема заключалась в пустом начальном значении, аналогичном:
byte[] bRead = new byte[client.ReceiveBufferSize];
На основе что я пробовал с локальной функцией, которая возвращала byte [], а также добавляла все байты в список соответственно. Ни один из этих методов не сработал.
Еще один поток, который я нашел с объяснением, которое пришло мне в голову: Почему в Java / Eclipse установка точки останова в моем коде меняет эффект этого оператора? В одном из ответов упоминается, что в конечном итоге это поток, работающий в фоновом режиме, который не успевает завершить sh до следующего шага. Я попробовал сделать это, заставив свой поток ждать, добавив секундомер и while-l oop, который сломался через 5 se c, но напрасно.
Теперь у меня нет идей, я запутался и буду очень рад, если бы кто-нибудь мог объяснить, что делают точки останова и что мне не хватает.