- PR -

DataSet→Byte配列→(通信)→Byte配列→DataSet

1
投稿者投稿内容
せんべい
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 61
お住まい・勤務地: 神奈川県川崎市
投稿日時: 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とって来るのに
わざわざサーバ側でとってクライアントに通信でひかなきゃなんねーんだよ
接続文字列かえるだけだろーが!(ひとりごと)
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-10-24 13:30
はずしているかもしれませんが。
MemoryStreamに書き込んだ後、ストリームのポインタをSeekで先頭に設定してないからでは?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-10-24 13:45
引用:

byteDataSizeは正しく設定されている ようです。(サーバ側のbyte配列サイズから正しいと判断しました)



この辺の検証が甘いですね。
送信前と受信後のbyte配列をファイルに落として比較してみるとか。
せんべい
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 61
お住まい・勤務地: 神奈川県川崎市
投稿日時: 2005-10-24 15:10
引用:

burton999さんの書き込み (2005-10-24 13:30) より:
はずしているかもしれませんが。
MemoryStreamに書き込んだ後、ストリームのポインタをSeekで先頭に設定してないからでは?



ありがとうございます。
その通りでした。先頭に設定するとうまくいきました。
ありがとうございました。

ちなみに、ファイル出力も行いましたが一緒でした。
ただ、一緒なのにもかかわらず、デシリアライズするときに
「{"入力ストリームは有効なバイナリ形式ではありません開始コンテンツ (バイト): 80-08-42-73-6B-4A-73-5F-4A-6F-68-6F-00-00-00-00-00 ..."}System.Exception {System.Runtime.Serialization.SerializationException}


とう例外が発生します。ん・・・・。まったく一緒なのに。
いきずまったら、また別スレッド立てます。
1

スキルアップ/キャリアアップ(JOB@IT)