`

WCF扩展:行为扩展Behavior Extension

 
阅读更多

1 引言

上回说到自定义扩展的第一步,是需要声明行为的类型。也就是通过实现一个行为接口,实现接口中的方法来声明行为的类型。

2 附件自定义行为到Operaiton或者是Endpoint

实现自定义的行为,第二步就是将自定义的行为类挂(附加)到一个Operation或者是Endpoint上去。

自定义的行为如果是和操作有关,就附加到一个operation上;如果和具体的操作没有关系,就附加到一个endpoint上。

附加到操作需要实现System.ServiceModel.Description.IOperationBehavior接口。如果是附加到endpoint上,需要实现System.ServiceModel.Description.IEndpointBehavior接口。

如果是一个实现System.ServiceModel.Dispatcher.IClientMessageFormatter的对象,功能是序列化传输到服务端的数据。按照定义,这是一个操作相关的功能。(可以参考上一篇的定义WCF扩展:行为扩展Behavior Extension<一>

3 通知WCF有关自定义行为的信息

实现自定义的行为,最后需要做的就是将这个行为通知WCF。让WCF知道这个行为的存在。有两种方法可以实现通知:代码和配置。

4 自定义行为示例

下面让我们来实现一个简单的自定义行为

4.1 声明

我们声明一个客户端的消息检查行为类

public class MyClientMessageInspector:IClientMessageInspector 
    {
        #region IClientMessageInspector Members

        public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply,
 object correlationState)
        {
            
        }

        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, 
System.ServiceModel.IClientChannel channel)
        {
            return null;
        }

        #endregion
    }

4.2 附加

将自定义的message inspector行为附加到客户端的运行时,附加到客户端运行时client runtime的endpoint层面。

 public class MyClientMessageInspector:IClientMessageInspector,IEndpointBehavior 
    {
        #region IClientMessageInspector Members

        public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply,
 object correlationState)
        {
            
        }

        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, 
System.ServiceModel.IClientChannel channel)
        {
            return null;
        }

        #endregion

        #region IEndpointBehavior Members

        public void AddBindingParameters(ServiceEndpoint endpoint, 
System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
            
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, 
ClientRuntime clientRuntime)
        {
            clientRuntime.MessageInspectors.Add(this);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, 
EndpointDispatcher endpointDispatcher)
        {
            
        }

        public void Validate(ServiceEndpoint endpoint)
        {
            
        }

        #endregion
    }

4.3 通知

有两种方式来通知WCF这个自定义行为。

1 代码的方式

因为需要添加到客户端的运行时,所以需要在客户端的代码中添加。

public interface IWcfClient
 {
 }
 public class WcfClient:ClientBase,IWcfClient 
{
   public WcfClient(string endpointConfigurationName):base(endpointConfigurationName )
   {
        base.Endpoint.Behaviors.Add(new Insfrastructures.MyClientMessageInspector());
   }
}

就是在构造函数中添加自定义的行为。

2 通过自定义配置节的配置的方式

让我们先定义一个行为扩展配置节的类

public class MyBehaviorExtensionElement:BehaviorExtensionElement 
    {

        public override Type BehaviorType
        {
            get { return typeof(MyClientMessageInspector); }
        }

        protected override object CreateBehavior()
        {
            return new MyClientMessageInspector();
        }
    }

然后再客户端的config文件中添加

<!--l version="<span style="color: #8b0000" mce_style="color: #8b000-->1.0" encoding="utf-8" ?>

    
        
            http://localhost:8000/SimpleService/Endpoint" 
				behaviorConfiguration="SimpleServiceEndpointBehavior"
				binding="customBinding"
                bindingConfiguration="SimpleServiceBinding" 
				contract="Extensibility.ISimple" 
				name="SimpleService" />
        
		
			
				SimpleServiceEndpointBehavior">
					
				
				
			
		
		
			
				SimpleServiceBinding">
					
				
			
		
		
			
				myMessageInspector"
					type="Insfrastructures
.MyBehaviorExtensionElement, Insfrastructures
.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
			
		
    

在 配置节添加行为扩展的配置节。然后在endpoint的behavior配置节中指定使用扩展中的行为。

Technorati 标签: WCF,EXtension,BEhavior
分享到:
评论

相关推荐

    一个非常简单的WCF例子:Hello World

    一个非常简单的WCF例子:Hello World 本解决方案有3个项目: 1、WCFClient:客户端,展示通过wcf后得到的结果,一个小的winform; 2、WCFContrlPanel:主控程序,作为打开/关闭wcf服务的控制面板,winform; 3、...

    Professional WCF 4: Windows Communication Foundation with .NET 4 (Wrox Programmer to Programmer)

    《Professional WCF 4: Windows Communication Foundation with .NET 4》是Wrox出版社出版的一本专为程序员设计的深入解析Windows Communication Foundation(WCF)的书籍。WCF是微软.NET Framework 4中的一个核心...

    创建一个简单的WCF程序:WcfServices、WcfServices2

    WCF服务是由接口(定义服务契约)、实现类(实现服务契约)和配置文件(定义服务的行为和绑定)组成的。在`WcfServices`和`WcfServices2`这两个项目中,我们可以看到这些元素的具体实现。 1. **服务契约**: 服务...

    wcf扩展性例子

    1. **行为扩展**:行为是WCF服务生命周期中的关键元素,包括服务行为、操作行为、契约行为和终结点行为。通过自定义行为,我们可以控制服务实例化、服务托管、错误处理、事务管理等。例如,你可以创建一个自定义的...

    我的第一个WCF程序:HelloInDigo

    课程的第一部分,"WCF概述",涵盖了WCF的基础概念,包括服务、终结点、绑定、行为等核心元素,以及如何设置和运行一个基本的服务实例。 WCF的核心概念: 1. **服务**:WCF服务是提供特定功能的逻辑实体,可以通过...

    Professional WCF 4: Windows Communication Foundation with .NET 4

    本书《Professional WCF 4: *** 4》致力于为读者全面介绍.NET 4中的Windows Communication Foundation(WCF)技术。WCF是.NET平台上的核心技术之一,主要用来构建面向服务的应用程序、在多种通信场景下交换消息,...

    WCF编程:WCF服务和客户端的建立[归纳].pdf

    Windows Communication Foundation (WCF) 是微软推出的一种用于构建分布式应用程序的框架,它集成了多种通信技术,为开发者提供了一种统一的方式来创建、发布和消费服务。WCF是.NET Framework 3.0及更高版本的一部分...

    WCF4高级编程Professional.WCF.4

    2. **服务配置**:学习如何通过配置文件来定制WCF服务的行为,包括绑定、行为、终结点和地址。理解配置文件的结构和用途,以及如何在代码中动态配置服务。 3. **绑定与传输协议**:探索各种内置的WCF绑定,如HTTP、...

    WCF技术专题:WCF入门与进阶

    WCF的主要目标是实现跨平台、跨语言的互操作性,以及在分布式系统中的高安全性、可靠性和可扩展性。 **一、WCF基础概念** 1. **服务**: WCF的核心单元,它定义了一组可调用的操作,可以通过网络进行访问。服务由...

    (15):扩展性-WCF课件

    WCF框架的设计充分考虑了可扩展性需求,允许开发者在多个层次上对其进行扩展,包括但不限于自定义`ServiceHost`的初始化、添加或修改服务、端点、契约的行为或操作级别、消息拦截等。 - **自定义ServiceHost初始化*...

    Wrox.Professional.WCF.4.Windows.Communication.Foundation.with.NET.4.

    通过理解和掌握WCF,开发者能够构建出高效、安全、可扩展的服务型应用。这本书《Wrox Professional WCF 4: Windows Communication Foundation with .NET 4》将帮助读者深入理解并熟练运用这些概念和技术。

    WCF教程WCF教程

    1. **行为扩展**:自定义服务行为和客户端行为,如行为配置、行为实现。 2. **绑定元素扩展**:创建自定义绑定以支持新的传输或编码方式。 3. **服务主机扩展**:控制服务启动、停止和生命周期。 4. **消息编码器**...

    WCF流:通过HTTP上传/下载文件

    Windows Communication Foundation(WCF)是.NET Framework中的一个强大组件,用于构建分布式应用程序。在处理大数据传输时,如大文件的上传和下载,WCF支持高效的流式传输模式,这可以显著降低内存消耗并提高性能。...

    jquery 调用WCF :多参数

    在`Web.config`文件中,配置服务行为和服务绑定,确保服务可用并能被外部调用。例如: ```xml &lt;behavior name="webBehavior"&gt; &lt;/behavior&gt; ``` 上述配置启用JSON和XML格式的数据传输,并...

    WCF: A Case Study Involving a Distributed Client/Server Game

    ### WCF:分布式客户端/服务器游戏案例研究 #### 背景 Windows Communication Foundation(WCF)是由微软开发的一款软件开发工具包,作为.NET 3.0的一部分发布。它为跨机器之间的通信提供了一个灵活而强大的实现...

    WCF:Windows平台新一代通讯基础研究

    ### WCF:Windows平台新一代通讯基础研究 #### WCF简介及其在Windows平台的应用价值 Windows Communication Foundation(简称WCF)是Microsoft推出的一种统一的编程模型、系统服务与工具集,旨在帮助开发者创建...

    Ninject.Extensions.Wcf:Ninject WCF扩展

    此扩展增加了对WCF服务和行为的依赖项注入的支持。 有3个Ninject ServiceHostFactory可以在和。 Ninject.Extensions.Wcf.NinjectServiceHostFactory用于普通服务 Ninject.Extensions.Wcf....

    WCF 入门学习小程序源码一起附上

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。对那些对WCF不是很了解的读者来说,这个例子将带领你...

Global site tag (gtag.js) - Google Analytics