3

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(); 

さらに考えはありますか?

4

1 に答える 1