SQLite からメッセージ キュー (シリアル化) を復元するこのコードがあります。
public void Restore()
{
try
{
const string databaseName = @"C:\Code\C#\WcfService\WcfService\mainDB.db3";
SQLiteConnection connection = new SQLiteConnection(string.Format("Data Source={0};", databaseName));
connection.Open();
try
{
SQLiteCommand command = new SQLiteCommand("SELECT * FROM dump ORDER BY DId DESC limit 1", connection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var info = (byte[])reader["DBinaryData"];
Queue<Message> deserializedData = GetDeserializedMessages(info);
var data = MergeQueueMessage(deserializedData);
Logger.Log(data.ToString());
}
}
finally
{
connection.Close();
}
}
catch (Exception e)
{
Logger.Log(e.Message);
}
}
public Queue<Message> GetDeserializedMessages(byte[] source)
{
Queue<Message> messages = null;
using (MemoryStream memoryStream = new MemoryStream(source))
{
BinaryFormatter formatter = new BinaryFormatter();
messages = (Queue<Message>)formatter.Deserialize(memoryStream);
}
return messages;
}
しかし、問題があります。フィールド「DBinaryData」から情報を逆シリアル化できません。DBの私のテーブルには以下が含まれています:
- DId (整数、主キー)
- DTime (テキスト)
- DBinaryData (Blob) // シリアル化されたオブジェクトとしてのメッセージ キューのダンプ