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

  • 相关阅读:
    BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
    simlescalar CPU模拟器源代码分析
    基于webRTC技术 音频和视频,IM解
    SVM明确的解释1__ 线性可分问题
    Atititjs javascript异常处理机制java异常转换.js exception process
    hibernate annotation 相关主键生成策略
    切向量,普通矢量,渐变
    C++动态数组简单的模拟二元堆
    [Angular] Create a custom validator for reactive forms in Angular
    [RxJS] Marbles Testings
  • 原文地址:https://www.cnblogs.com/Jax/p/1590261.html
Copyright © 2011-2022 走看看