ユーザー定義のクラスをソケットに渡します。SendObjectコードは以下のとおりです。ローカルマシンでは機能しますが、Webサーバーに公開すると、自分のマシンのアプリケーションサーバーと通信できなくなります。
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;
}
}
ツールプロジェクトの1つのクラスであり、UserDataに関する他のクラスが知りたくない場合は、これをうまく行うことができます。イライラする!
ああ。UserDataクラスの中にDataSetがあるからだと思います。おかしなことに、私はこの作品を見てきましたが、1回のリクエストの後、ループが発生し、再び動作させることができなくなりました。
なぜこれが起こるのか誰もが知っていますか?dllを比較して、Webサーバーとローカルマシンで同じであることを確認しました。AssemblyInfo.csでバージョン管理をオンにして再確認したので、同じように見えます。
考えられる原因は、シリアル化と逆シリアル化の間の無効なストリームまたはオブジェクトのバージョン変更です。
編集:
問題はサイズにあるようです。1024バイト未満に保つと(ここで推測しています)、Webサーバー上で機能し、内部にDataSetがある場合は機能しません。k実際、これは非常に不可解で、ds.GetXml(を使用してDataSetを文字列に変換しました。 )そしてこれはまたそれを爆破させます。:(それで、ネットワーク全体で私のソケットの何かが間違っていて、データを読みたくないようです。