我通过套接字传递用户定义的类。下面是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

显然,我有一个静态缓冲区,该缓冲区是从一些玩具示例中提取的,然后当我开始传递填充的数据集时,它们太大了。我已经涵盖了一些动态缓冲区问题的答案。

10-07 18:49