6

サーバー側のクラスに実装されたファクトリ メソッドが具体的なオブジェクトへのインターフェイスを返し、これもまったく同じサーバー上で実行される .NET リモート処理コードがあります。.NET リモート処理は自動的にプロキシを作成し、インターフェイスをクライアントに渡して直接呼び出すことができるようにします。

インターフェースの例:

public interface IFactory
{
    IFoo GetFoo();
}

public interface IFoo
{
    void DoSomething();
}

クライアントコードの例:

...
IFactory factory = (IFactory) System.Activator.GetObject (typeof (IFactory), url);
...
IFoo foo = factory.GetFoo ();  // the server returns an interface; we get a proxy to it
foo.DoSomething ();
...

これはすべてうまくいきます。ただし、コードを WCF に移行しようとしています。元の .NET リモート処理と同様に、インターフェイスを渡し、WCF がクライアント上でオンザフライでプロキシを生成する手段があるかどうか疑問に思います。

また、実際のクラスを公開したくないので、クラス インスタンスを返したくありません。また、完全なインスタンスをシリアル化し、サーバーとクライアントの間でやり取りすることもできません。クライアントがインターフェイス ポインター/プロキシを介してサーバー オブジェクトと通信することを本当に望んでいます。

何か案は?

4

3 に答える 3

2

クライアント起動オブジェクトの代わりにセッションを使用する (MSDN)

于 2008-11-13T21:20:52.687 に答える
1

すみません、ジェゼル、わかりません。

はい、ChannelFactoryクライアントで を使用して へのプロキシを作成できますIFactory。これは、そのシングルトン オブジェクトが の URI を介してサーバーによって「公開」されているためServiceHostです。

しかし、IFooサーバー上の私のインスタンスは関連付けられていませんServiceHost。クライアントでプロキシを呼び出してそれらを取得しIFactory、WCF に server への呼び出しを実行させますIFactory。これにより、いくつかの が提供IFooされ、クライアントにマーシャリングされ、動的に生成されたプロキシにラップされます。factory.GetFoo ();私は本当に自分のクライアントに書き込めるようにしたいだけです...

それまでの間、Brian は、私が MSDN で見落としていた非常に興味深いドキュメントを教えてくれました。このドキュメントでは、セッションを使用して .NET Remoting インターフェイスのマーシャリングを模倣する方法、EndPointAddress10および ... あなたが書いChannelFactoryたように、クライアント側のプロキシを取得する方法について説明しています。

これで、.NET リモート処理コードを複製する方法がわかりましたが、比較的高いコストを支払っています。WCF に関連するコードの複雑さは、単純な古い .NET リモート処理ソリューションよりもかなり高くなります。

于 2008-11-13T21:36:55.463 に答える
0

ChannelFactory クラスはまさにこれを行い、インターフェイスを指定して実行時に動的にプロキシを生成します。

于 2008-11-13T21:10:39.447 に答える