我通过套接字传递用户定义的类。 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转换为字符串( )这也会导致它爆炸。 :(因此,似乎跨网络的东西与我的套接字是错误的,不想读取数据。
答案 0 :(得分:1)
这是通过我在此发布的更好的问题解决的:
显然我有一个静态缓冲区,我从一些玩具示例中解除了,然后当我开始传递填充的数据集时,它们太大了。我也解决了一些动态缓冲问题。