代码之家  ›  专栏  ›  技术社区  ›  Aaron Fischer

如何拦截WCF类的创建

  •  0
  • Aaron Fischer  · 技术社区  · 15 年前

    我有一个wcf服务,我没有使用服务引用。 与服务器的通信使用从ClientBase派生的类。

    我想在客户端截取wcf的默认对象创建,以便提供实现INotifyPropertyChanged(由castle动态代理创建)的子类型。

    NHibernate returning a class implementing INotifyPropertyChanged 仅限wcf。

    4 回复  |  直到 15 年前
        1
  •  1
  •   marc_s    15 年前

    我不完全明白你想做什么-你想从服务器发送一个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处理程序。

        2
  •  0
  •   MattC    15 年前

    你是说从你的ChannelFactory中截取CreateChannel的对象吗?

    您可以重写BaseChannelFactory并修改它返回的ClientBase对象?

        3
  •  0
  •   chilltemp    14 年前

    微软的 SVCUTIL.EXE 可以使用正确实现的INotifyPropertyChanged自动生成代理数据类。看看enableDataBinding参数。这并不完全是你想要的,但无论如何可能会解决你的需求。

        4
  •  0
  •   Cosmin Onea    14 年前

    看看城堡的WCF设施。我确信您可以扩展它来添加inotifyproperty更改。

    http://www.castleproject.org/container/facilities/trunk/wcf/index.html