- - PR -
DataSet→Byte配列→(通信)→Byte配列→DataSet
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-24 13:12
現在、サーバ側でDataSetをBinaryFormatterでシリアライズして
Byte配列を取得し、クライアントに通信で飛ばして、クライアント側で このByte配列をDataSetにデシリアライズしようと考えています。 ・サーバ側のDataSet→Byte配列のコード MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); writer.Write(strDataTableName); (new BinaryFormatter()).Serialize(writer.BaseStream, <dataset>); writer.Flush(); byte[] buffer = stream.ToArray(); writer.Close(); stream.Close(); ・クライアント側のByte配列→DataSetのコード MemoryStream stream = new MemoryStream(); stream.Write(byteData, 0, byteDataSize); object <dataset> = (new BinaryFormatter()).Deserialize(stream); ところが、「解析の完了前に、ストリームの終わりに達しました」 とSerializationExceptionが発生しています。byteDataSizeは正しく設定されている ようです。(サーバ側のbyte配列サイズから正しいと判断しました) この例外の対処方法をご存知の型は御教授ください。 よろしくお願いします。 某社の通信ミドルに悩まされている者からです・・・・・ なんでWebサービスつかわねーんだよ。大体DBからDataSetとって来るのに わざわざサーバ側でとってクライアントに通信でひかなきゃなんねーんだよ 接続文字列かえるだけだろーが!(ひとりごと) | ||||
|
投稿日時: 2005-10-24 13:30
はずしているかもしれませんが。
MemoryStreamに書き込んだ後、ストリームのポインタをSeekで先頭に設定してないからでは? | ||||
|
投稿日時: 2005-10-24 13:45
この辺の検証が甘いですね。 送信前と受信後のbyte配列をファイルに落として比較してみるとか。 | ||||
|
投稿日時: 2005-10-24 15:10
ありがとうございます。 その通りでした。先頭に設定するとうまくいきました。 ありがとうございました。 ちなみに、ファイル出力も行いましたが一緒でした。 ただ、一緒なのにもかかわらず、デシリアライズするときに 「{"入力ストリームは有効なバイナリ形式ではありません開始コンテンツ (バイト): 80-08-42-73-6B-4A-73-5F-4A-6F-68-6F-00-00-00-00-00 ..."}System.Exception {System.Runtime.Serialization.SerializationException} 」 とう例外が発生します。ん・・・・。まったく一緒なのに。 いきずまったら、また別スレッド立てます。 |
1