0

サービス参照を使用していない wcf サービスがあります。クラスとインターフェイスは、両方のクライアント サーバーが参照する dll で定義されます。サーバーとの通信は、ClientBase から派生したクラスを使用します。

INotifyPropertyChanged (城の動的プロキシによって作成された) を実装するサブタイプを提供できるように、クライアント側で wcf の既定のオブジェクトの作成をインターセプトしたいと考えています。

基本的に、 NHibernateが wcf に対してのみINotifyPropertyChanged を実装するクラスを返すのと同じ考え方です。

4

4 に答える 4

1

私はあなたが何をしようとしているのか完全には理解していません-あなたはサーバーからクライアントにPOCOを送りたいです:つまり、あなたはそのPOCOクラスを作成し、それを[DataContract]として装飾し、あ​​なたのメンバーを装飾する必要があります[DataMember]でシリアル化したい。

クライアント側では、同じシリアル化されたワイヤ形式を持つクライアント側のプロキシクラスが生成されますが、WCFは最小公分母としてXMLスキーマを使用してシリアル化されるため、インターフェイスなどを送信することはできません。具体的なもののみです。インスタンスクラス。また、クライアントでは、サーバーと同じクラスを取得することはできません。同じ「ルックアンドフィール」(およびシリアル化形式)を持つクラスだけを取得します。

だから私はあなたがどのようにそしてどこに引っ掛かりたいのか本当にわかりません。

あなたがするかもしれない1つのことはに基づいてクライアント側のメッセージインスペクターを作成することです

public interface IClientMessageInspector
{
    void AfterReceiveReply(ref Message reply, object correlationState);
    object BeforeSendRequest(ref Message request, IClientChannel channel);
}

これにより、「AfterReceiveReply」イベントがキャッチされます。次に、シリアル化されたPOCOクラスを取得し、それをINotifyPropertyChangedハンドラーを実装する別のクラスに変換します。

WCFでメッセージインスペクターを作成して処理する方法については、いくつかのブログ投稿を参照してください。

于 2009-11-30T20:00:08.090 に答える
0

ChannelFactory から CreateChannel がスピンアップするオブジェクトをインターセプトすることについて話しているのですか?

BaseChannelFactory をオーバーライドして、それが返す ClientBase オブジェクトを修正できますか?

于 2009-12-01T11:23:54.803 に答える
0

キャッスル WCF 施設を見てみましょう。それを拡張して INotifyPropertyChanged を追加できると確信しています。この機能は、DynamicProxy を使用してプロキシを生成します。

http://www.castleproject.org/container/facilities/trunk/wcf/index.html

于 2010-05-14T20:22:56.207 に答える
0

Microsoft のSVCUTIL.EXEは、INotifyPropertyChanged が適切に実装されたプロキシ データ クラスを自動的に生成できます。enableDataBinding パラメータを見てください。それはまさにあなたが求めているものではありませんが、とにかくあなたのニーズを解決するかもしれません.

于 2010-03-01T22:05:41.043 に答える