zoukankan      html  css  js  c++  java
  • WCF自定义行为 Step by Step (三)behavior模型

    本文全都是自定义behavior的定义。阅读前请参阅本系列前面两篇文章。

    behavior,说白了,就是内部的附加操作。在效果上,有点像ASP.NET中的HttpModule和HttpHandle(实现原理当然不一样了)。

    在上面的例子中,我们为Service添加了附加的操作,就是在调用契约方法之前,把从Client传来的参数+1。我们还可以在Client端也添加类似的行为,我会在下一章中给出这个例子。

    behavior在Service和Client分别有不同的类型:

    在Service中,这些类型都存放在System.ServiceModel.Dispatcher命名空间下。

    在Client中,这些类型都存放在System.ServiceModel.Channels命名空间下。

    image

    此外,可以在3个级别定义behavior,

    1.Contract级别,顾名思义,把行为加诸于接口(契约)之上,如下所示,也就是MyContractBehavior这个Attribute:

    [MyContractBehavior]
    [ServiceContract]
    public interface ISimple
    {
        [OperationContract(IsOneWay=true)]
        void AcceptRequest(string someRequest);
    }

    2.Endpoint级别,把行为加在终结点上,还记得上一篇文章的MyParameterInspector么,下面是code形式的添加(另一种是在配置文件中添加,稍后讨论):

    host.Description.Endpoints[0].Contract.Operations[0].Behaviors.Add(new MyParameterInspector());

    3.Operation级别,把行为加在操作(契约的方法)上。这个级别是最低的。如下所示,IdentityValidateIdentityCache都是自定义行为。

    [ServiceContract] 
    public interface IIdentityService
    {
        [IdentityValidate]
        [IdentityCache] 
        [OperationContract]
        int GetIDByName(string name);
    }

    根据我们的需要,在不同级别定义behavior,它们的作用域不同,像Operation级别只影响一个方法,而Endpoint级别影响到这个终结点的所有操作,Contract级别则影响调用该契约的所有操作。

    有5种类型的Behavior:

    ParameterInspection

    MessageFormatting

    OperationInvoker

    MessageInspection

    OperationSelector

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/Jax/p/1590261.html
Copyright © 2011-2022 走看看