SerializationException:解析完成之前遇到的Stream of End

时间:2016-05-09 09:44:12

标签: c# exception networkstream

这是继承的代码,有时会失败,但我无法弄清楚原因。

using(NetworkStream stream = client.GetStream()) {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, message_);
    if(responseHandler_ != null) {
        Message response = (Message) formatter.Deserialize(stream); // <-- fails here
        responseHandler_(response, stream);   
    }
}

我用Google搜索了它。我试过寻求建议,但NetworkStream无法寻求。

编辑:它并不总是失败。只是偶尔。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在这种情况下,我建议您将NetworkStream复制到可以寻求的MemoryStream - 您可以找到非常好的示例here

使用MemoryStream,您可以在序列化后重置流的位置

using(var ms = new MemoryStream(stream) {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(ms , message_);
    if(responseHandler_ != null) {
        ms.Location = 0;
        Message response = (Message) formatter.Deserialize(ms); 
        responseHandler_(response, ms);   
    }
}

答案 1 :(得分:0)

问题出在发送方。添加“逗留”选项解决了它。

client.LingerState = new LingerOption(true,10);