[英]How to intercept WCF class creation
我有一个wcf服务,但我没有使用它的服务参考。 客户端服务器参考都在dll中定义了类和接口。 与服务器的通信使用从ClientBase派生的类。
我想在客户端拦截wcf的默认对象创建,以便我可以提供实现INotifyPropertyChanged(由城堡动态代理创建)的子类型。
基本上, NHibernate返回只为wcf 实现INotifyPropertyChanged的类的想法相同。
我不太了解您要做什么-您想将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中编写和处理消息检查器的博客文章:
您是在谈论拦截ChannelFactory的CreateChannel旋转的对象吗?
您可以覆盖BaseChannelFactory并修改它返回的ClientBase对象吗?
Microsoft的SVCUTIL.EXE可以使用正确实现的INotifyPropertyChanged自动生成您的代理数据类。 查看enableDataBinding参数。 这并不完全是您的要求,但无论如何都可以解决您的需求。
看看Castle WCF设施。 我很确定您可以扩展它以添加INotifyPropertyChanged。 该设施使用DynamicProxy生成代理。
http://www.castleproject.org/container/facilities/trunk/wcf/index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.