Двоичный поток 'NN' не содержит допустимого BinaryHeader - PullRequest
2 голосов
/ 16 декабря 2009

Я передаю определенные пользователем классы через сокеты. Код SendObject находится ниже. Он работает на моем локальном компьютере, но когда я выполняю публикацию на WebServer, который затем связывается с сервером приложений на моем собственном компьютере, происходит сбой.

    public bool SendObject(Object obj, ref string sErrMsg)
    {
        try
        {
            MemoryStream ms = new MemoryStream();
            BinaryFormatter bf1 = new BinaryFormatter();
            bf1.Serialize(ms, obj);
            byte[] byArr = ms.ToArray();
            int len = byArr.Length;
            m_socClient.Send(byArr);
            return true;
        }
        catch (Exception e)
        {
            sErrMsg = "SendObject Error: " + e.Message;
            return false;
        }
    }

Я могу сделать это нормально, если это один класс в моем проекте инструментов, а другой класс о UserData просто не хочет знать. Срыв!

Оу. Я думаю, это потому, что класс UserData имеет DataSet внутри него. Как ни странно, я видел эту работу, но после 1 запроса она становится зацикленной, и я не могу заставить ее работать снова.

Кто-нибудь знает, почему это может быть? Я посмотрел на сравнение библиотек, чтобы убедиться, что они одинаковы на WebServer и на моей локальной машине, и они выглядят так, как я включил управление версиями в AssemblyInfo.cs для двойной проверки.

Возможные причины: неверное изменение потока или версии объекта между сериализацией и десериализацией.


Редактировать

Хорошо, похоже, проблема в размере. Если я держу его под 1024 байтами (я предполагаю здесь), он работает на веб-сервере и не работает, если внутри него есть DataSet. На самом деле это так озадачивает, что я преобразовал DataSet в строку, используя ds.GetXml ( ) и это также вызывает его взрыв. :( Похоже, что по всей сети что-то с моими сокетами не так и не хочет читать данные.

1 Ответ

1 голос
/ 09 марта 2010

Это решается лучшим вопросом, который я разместил здесь:

При отправке больших сериализованных объектов через сокеты происходит сбой только при попытке увеличить массив байтов, но это нормально при использовании массивного байтового массива

Очевидно, у меня был статический буфер, который я поднял из какого-то игрушечного примера, а затем, когда я начал передавать заполненные наборы данных, они были слишком большими. Ответы на некоторые проблемы с динамическим буфером у меня тоже были.

...