繁体   English   中英

如何拦截WCF类的创建

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM