在使用 WCF 时,我们可以定义一个服务契约:
[ServiceContract]
public interface IMyService
{
[OperationContract]
int MyOperation(int x);
}
假设我在 处打开一个服务主机www.example.com/MyService
,那么从我的客户端使用此服务的一种方法是
IMyService service =
new ChannelFactory<IMyService>(new BasicHttpBinding(),
new EndpointAddress("www.example.com/MyService")).CreateChannel();
int result = service.MyOperation(10);
所以不知何故,service
implements IMyService
,尽管这从未明确完成。如果我调试这些行,我可以看到这service
是__TransparentProxy
. 正如您从源代码中看到的那样,该类中的注释说
透明代理神奇地创建一条消息,表示对其的调用,并委托给 Real 代理来执行真正的远程处理工作。
对我来说,这确实是“魔术”,但我想必须有一个合乎逻辑的解释。
这里的模式非常有用。我想要的是Magic
下面的一些类(我知道语法不正确,否则我不需要问)。为了论证,假设我希望这个类打印所调用方法的名称。
public class Magic<T> : T {
// don't know what to do here
}
这样我就可以打电话了
IMyService service = new Magic<IMyService>();
service.MyOperation(10);
这将打印:
MyOperation
这样的事情可能吗?(应该是,因为__TransparentProxy
做了类似的事情。)如果是这样,这将如何工作?