二进制流'NN'不包含有效的BinaryHeader

时间:2009-12-16 18:22:23

标签: c# sockets serialization dataset binaryformatter

我通过套接字传递用户定义的类。 SendObject代码如下。它可以在我的本地机器上运行,但是当我发布到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个以下(我在这里猜测)它可以在Web服务器上运行,如果它里面有一个DataSet则不会。它实际上这是令人费解的我使用ds.GetXml将DataSet转换为字符串( )这也会导致它爆炸。 :(因此,似乎跨网络的东西与我的套接字是错误的,不想读取数据。

1 个答案:

答案 0 :(得分:1)

这是通过我在此发布的更好的问题解决的:

Sending large serialized objects over sockets is failing only when trying to grow the byte Array, but ok when using a massive byte array

显然我有一个静态缓冲区,我从一些玩具示例中解除了,然后当我开始传递填充的数据集时,它们太大了。我也解决了一些动态缓冲问题。