2011-11-08 6 views
1

私はWCFを介してSQL DBに接続するWP7アプリケーションを作っています。しかし、クライアントプロキシを追加してテストした後、私はこのエラーを受け取りました。WP app with WCF

型または名前空間名IExtensibleDataObjectはどうやら

答えて

1

を(あなたは?アセンブリ参照が不足している)(そしてthis blogによる)名前空間System.Runtime.Serializationに存在しない、WP7で使用される.NET Compact Frameworkでは、IExtensibleDataObjectを公開していません。 System.Runtime.Serialization名前空間にあります。

代わりにSilverlight Service Model Proxy Generation Toolを使用してクライアントプロキシを生成することもできます。結果のコードはWP7で動作するはずです。

0

IExtensibleDataObjectを実装する必要性を検証することは価値があります。これは、異なるバージョンのデータコントラクト間の互換性を前提に設計されています(Forward-Compatible Data Contractsを参照)。

ラウンドトリップデータを必要とするシナリオ(たとえば、メッセージをサービスに送信し、同じデータコントラクトでメッセージを送り返すなど)と(2)新しいデータコントラクトを使用しているクライアントをサポートする必要はありません。これは、以前のバージョンのデータコントラクトだけを理解しているサービスにメッセージを送信し、そこで送信されたデータを使用して新しいバージョンのクライアントにメッセージを返します。これは重要なシナリオですが、誰もがサポートする必要はありません。しばしば下位互換性で十分です。また、IExtensibleDataObjectのアプローチでは、新しいデータコントラクトにある余分なデータは古いサービスのロジックによって無視され、呼び出し元にそのまま返されます。繰り返しますが、これはいくつかのケースに適用され、他のケースには適用されませ最も単純なケースでは、電話アプリケーションの新しいバージョンを古いバージョンのサービスにラウンドトリップさせる必要があるのはなぜですか?

この機能が必要ないと思われる場合は、サービスからIExtensibleDataObjectコントラクトを削除することを検討する価値があります。

このような順方向互換性のスタイルが必要な場合は、WCF生成プロキシなしで作業し、チャネルを作成し、System.ServiceModel.Channels.Messagesを送受信し、SOAPメッセージを自分で処理します。元の契約に含まれていなかった余分なXML要素で何をしたいのですか?間違いなく先進的な話題ですが、あなたが心に留めておけばそれが可能です。