我通过套接字传递用户定义的类。下面是SendObject代码。它可以在我的本地计算机上运行,但是当我发布到WebServer时,该WebServer然后与我自己的计算机上的App Server通信时,它将失败。
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个请求后,它变得很不稳定,无法再次使用。
有人知道为什么会这样吗?我已经看过比较这些dll,以确保它们在WebServer和我的本地计算机上都相同,并且它们看起来是一样的,因此我在AssemblyInfo.cs中启用了版本控制以进行仔细检查。
可能的原因是序列化和反序列化之间无效的流或对象版本更改。
编辑:
好的,看来问题出在尺寸上。如果我将其保持在1024 byby以下(我猜是在这里),则它可以在Web服务器上运行,并且如果其中包含DataSet,则无法运行。k实际上,这很令人费解,我使用ds.GetXml()将DataSet转换为字符串。 ),这也会使其爆炸。 :(因此,似乎在网络上我的套接字出了点问题,并且不想读入数据。
最佳答案
我在这里发布的一个更好的问题解决了这个问题:
Sending large serialized objects over sockets is failing only when trying to grow the byte Array, but ok when using a massive byte array
显然,我有一个静态缓冲区,该缓冲区是从一些玩具示例中提取的,然后当我开始传递填充的数据集时,它们太大了。我已经涵盖了一些动态缓冲区问题的答案。