私は、CQRSを学習し、保守可能なWCFサービスを作成することを目的として、このプロジェクトを開始しました。ただし、WCFに関する一般的な質問がいくつかあります。コマンド/クエリハンドラーコントラクトとハンドラーを追加するたびに、プロジェクトをビルドし、Visual Studioでクライアントのサービス参照を右クリックして、[サービス参照の更新]を選択します。これにより、通常、問題なく新しいコマンド/クエリを操作できます。
ただし、多くの場合、実際にサービス参照全体を削除してから、再度追加する必要があります。これが、このエラーを回避できる唯一の方法です。
パラメータ http://tempuri.org/:queryをシリアル化しようとしたときにエラーが発生しました。InnerExceptionメッセージは「タイプ」Contract.Queries.Countries.GetCountriesStartingWithLetterQueryで、データコントラクト名は「GetCountriesStartingWithLetterQuery:http ://schemas.datacontract.org/2004/07/Contract.Queries.Countries 」でした。DataContractResolverを使用するか、既知のタイプのリストに静的に不明なタイプを追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加します。詳細については、InnerExceptionを参照してください。
その場合、サービス参照を削除して再度追加しても、新しいコマンド/クエリが機能しないことがあります。既知のタイプが登録されているWCFサービスコードにブレークポイントを追加しようとしても、ヒットすることはありません。新しいコマンド/クエリが既知のタイプとして登録されていないため、サービス参照が失敗しているようです。
このCQRSWCFモデルでサービスを更新する適切な方法は何ですか?ありがとう。
更新1:私の問題はすべて、EFがプロキシオブジェクトを生成し、それらをWCFサービスを介して送信しようとすることから発生します。このサービスはプロキシについては知らず、POCOだけを知っています。
@Peter-私はEF5コードファーストを使用しています。私はすべてのPOCOを別のプロジェクトに持っています。リポジトリパターンを使用して、データベースからエンティティを取得します。countryRepository.GetById(myId)と言うと、POCOではなくプロキシオブジェクトが取得されます。ProxyCreationを無効にすると、POCOが返されますが、それぞれの外部キーIDが入力されている間、ナビゲーションプロパティは常にnullになります。たぶん私はリポジトリから何かを取得するときにnavプロパティに.Includeを使用する必要がありますか?現在コードにアクセスできないため、明日確認する必要があります。
あるいは、AutoMapperについてたくさん読んだことがあります。これを使用して、プロキシオブジェクトをPOCOにマッピングできますか?ただのアイデアですが、それは正しくないようです。
編集2:ValueInjectorを使用して、動的プロキシオブジェクトをPOCOに非常に簡単にマッピングできることがわかりました。その後、問題なくPOCOをネットワーク経由で送信できます。詳細については、この投稿を参照してください。