WCF を使用する場合、サービス コントラクトを定義できます。
[ServiceContract]
public interface IMyService
{
[OperationContract]
int MyOperation(int x);
}
で servicehost を開いたとしwww.example.com/MyService
ます。クライアントからこのサービスを使用する 1 つの方法は次のとおりです。
IMyService service =
new ChannelFactory<IMyService>(new BasicHttpBinding(),
new EndpointAddress("www.example.com/MyService")).CreateChannel();
int result = service.MyOperation(10);
したがって、明示的に行われたことはありませんが、どうにかして をservice
実装します。これらの行をデバッグすると、 のインスタンスであるIMyService
ことがわかります。ソースコードからわかるように、そのクラスのコメントはservice
__TransparentProxy
透過プロキシは魔法のように呼び出しを表すメッセージを作成し、リアル プロキシに委任して実際のリモート処理を行います。
私にとってこれは確かに「魔法」ですが、論理的な説明が必要だと思います。
ここでのパターンは非常に便利です。私が望むのは、Magic
以下のようなクラスです (構文が正しくないことはわかっています。それ以外の場合は、尋ねる必要はありません)。議論のために、このクラスに呼び出されたメソッドの名前を出力させたいとしましょう。
public class Magic<T> : T {
// don't know what to do here
}
私が電話できるように
IMyService service = new Magic<IMyService>();
service.MyOperation(10);
そして、これは次のように出力されます:
MyOperation
このようなことは可能ですか?(__TransparentProxy
似たようなことをするので、そうあるべきです。)もしそうなら、これはどのように機能しますか?