【问题标题】:How to intercept WCF class creation如何拦截 WCF 类的创建
【发布时间】:2009-11-30 19:22:24
【问题描述】:
【问题讨论】:
标签:
.net
wcf
dynamic-proxy
【解决方案1】:
我不完全理解您要做什么-您想将 POCO 从服务器发送到客户端:这意味着,您需要创建该 POCO 类并将其装饰为 [DataContract],并装饰其您想用 [DataMember] 序列化的成员。
在客户端,您将获得一个生成的客户端代理类,该类具有相同的序列化有线格式 - 但由于 WCF 使用 XML 模式作为最低公分母进行序列化,因此您无法发送接口等内容- 只有具体的实例类。在客户端上,您不会获得与服务器上相同的类 - 只有一个具有相同“外观”(和序列化格式)的类。
所以我真的不知道你想如何以及在哪里挂钩。
您可能会做的一件事是创建一个基于
的客户端消息检查器
public interface IClientMessageInspector
{
void AfterReceiveReply(ref Message reply, object correlationState);
object BeforeSendRequest(ref Message request, IClientChannel channel);
}
这将捕获“AfterReceiveReply”事件,然后您将通过网络获取序列化的 POCO 类,并将其转换为另一个也将实现 INotifyPropertyChanged 处理程序的类。
查看一些关于如何在 WCF 中编写和处理消息检查器的博客文章:
【解决方案2】:
你是说从你的 ChannelFactory 中截取 CreateChannel 启动的对象吗?
您可以覆盖 BaseChannelFactory 并修改它返回的 ClientBase 对象吗?
【解决方案3】:
Microsoft 的SVCUTIL.EXE 可以自动生成您的代理数据类,并正确实施了 INotifyPropertyChanged。查看 enableDataBinding 参数。这并不完全符合您的要求,但无论如何可能会解决您的需求。