在对Remoting的服务端进行拦截时遇到了些问题,先后采取两种方式都不行
1、基于自定义代理的
实现RealProxy并通过ProxyAttribute设置对象需要自定义代理,
这种方式比较糟糕,除了第一次请求创建服务端对象有消息外什么也拦截不到
2、在上下文边界上分配侦听接收器
利用IContextAttribute,IContextPropery和IContributeServerContextSink,
开始一切都很顺利,创建服务端对象的请求和无返回值方法调用都OK,可在测试有返回值的方法时不对了,执行NextSink.SyncProcessMessage(msg)时服务端CPU100%,然后出现“堆栈溢出”的异常
这两种方式在非Remoting下都是OK的,对基于代理的因为Remoting会创建自已的代理对象,可以理解,另一种却不清楚了。