Raven DB .Net クライアントを使用して RavenDB からサブスクリプションを取得しようとした (そして成功した) 人はいますか?
以下を実行すると、Json シリアライゼーションの問題が発生し、
「値「Subscriber.Messages.Events.MyEvent、Version=1.0.0.0」を「NServiceBus.Unicast.Subscriptions.MessageType」に変換中にエラーが発生しました。メッセージ
コードは簡単です:
var documentStore = new DocumentStore
{
Url = "http://localhost:8080/",
DefaultDatabase = "publisher",
};
documentStore.Initialize();
using (var session = documentStore.OpenSession())
{
return session.Query<NServiceBus.Unicast.Subscriptions.Raven.Subscription>("Raven/DocumentsByEntityName").ToArray();
}
検索が機能するため、これは間違いなくシリアル化の問題です。以下の代替を使用する場合と同様に:
session.Advanced.LuceneQuery<Subscription>("Raven/DocumentsByEntityName").QueryResult.Results[0]
RaveDB スタジオでは、発行元データベースで次のドキュメントを確認できます。
{
"MessageType": "Subscriber.Messages.Events.MyEvent, Version=1.0.0.0",
"Clients": [
{
"Queue": "samplesubscriber",
"Machine": "myDesktopHere"
}
]
}
値「Subscriber.Messages.Events.MyEvent、Version=1.0.0.0」をタイプ「NServiceBus.Unicast.Subscriptions.MessageType」に変換中にエラーが発生しました。
シリアル化が失敗する理由を知っている人はいますか?
私は NServiveBus.Host 4.2、Raven-DB クライアント 1.0.616、および Newtonsoft.json 4.0.5 を使用しています。
ちなみに、dotpeek を使用して型を取得し、ローカル バージョンを作成しました。NSB dll から独自のサブスクリプション、MessageType、MessageTypeConvertor を作成しました。その後、問題なく文字列をデシリアライズすることができました。何かご意見は?
編集
提案によると、高度な Lucene クエリは結果を取得するのに優れた仕事をします。しかし、デシリアライズは失敗します。たとえば、検索結果は最初の行で返されますが、return ステートメントで deserlize に失敗します。NSB dll からサブスクリプション タイプのローカル バージョンを取得し、型コンバーターを実装して、再び NSB ライブラリから取得し、NServiceBus.Unicast.Subscriptions.Raven.Subscription の代わりにそれらを使用すると正常に動作します。必然的に、それは安定した選択ではありません。
var searchResults = session.Advanced.LuceneQuery<NServiceBus.Unicast.Subscriptions.Raven.Subscription>("Raven/DocumentsByEntityName").WhereEquals("Tag", "Subscription").QueryResult.Results;
return searchResults.Select(subscriptionJsonObject => JsonConvert.DeserializeObject<NServiceBus.Unicast.Subscriptions.Raven.Subscription>(subscriptionJsonObject.ToString())).ToList();
さらに考えはありますか?