Я передаю определенные пользователем классы через сокеты. Код 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 ( ) и это также вызывает его взрыв. :( Похоже, что по всей сети что-то с моими сокетами не так и не хочет читать данные.