返回顶部
首页 > 资讯 > 精选 >WCF行为扩展怎么实现
  • 120
分享到

WCF行为扩展怎么实现

2023-06-17 20:06:50 120人浏览 独家记忆
摘要

这篇文章主要讲解了“WCF行为扩展怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF行为扩展怎么实现”吧!WCF以其灵活的可扩展架构为开发者提供了方便,其中WCF行为扩展或许是应用

这篇文章主要讲解了“WCF行为扩展怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF行为扩展怎么实现”吧!

WCF以其灵活的可扩展架构开发者提供了方便,其中WCF行为扩展或许是应用中最为常见的。自定义对行为的扩展并不复杂,但仍有许多细节需要注意。

在服务端,一般是对DispatchRuntime和DispatchOperation进行扩展,扩展点包括了对参数和消息的检查,以及操作调用程序,它们对应的接口分别为IParameterInspector,IDispatchMessageInspector以及 IOperationInvoker。而在客户端,则是对ClientRuntime和ClientOperation进行扩展,扩展点包括对参数和消息的检查,对应的接口分别为IParameterInspector和IClientMessageInspector。这些接口类型均被定义在 System.ServiceModel.Dispatcher命名空间下,其中IParameterInspector接口可以同时作用在服务端和客户端。

对这些接口的实现,有点类似于aop的实现,可以对方法调用前和调用后注入一些额外的逻辑,所以通常会将这些扩展称为侦听器。例如IParameterInspector接口,就定义了如下方法:

void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState);  object BeforeCall(string operationName, object[] inputs);

在调用服务对象的目标方法前,会调用BeforeCall方法,而在调用后则会调用AfterCall方法。例如我们可在方法调用前检验计算方法的参数是否小于0,如果小于0则抛出异常:

public class CalculatorParameterInspector:IParameterInspector  {  public void BeforeCall(string operationName, object[] inputs)  {  int x = inputs[0] as int;  int y = inputs[1] as int;  if (x <0 || y < 0)  {  throw new FaultException("The number can not be less than zero.");  }  return null;  }  public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)  {  //empty;  }  }

对消息的检查区分了服务端和客户端,接口方法根据消息传递的顺序刚好相反[注]。我们可以通过接口方法对消息进行处理,例如打印消息的Header:

public class PrintMessageInterceptor : IDispatchMessageInspector  {  #region IDispatchMessageInspector Members   public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)  {  MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);  request = buffer.CreateMessage();   Console.WriteLine("After Receive Request:");  foreach (MessageHeader header in request.Headers)  {  Console.WriteLine(header);  }  Console.WriteLine(new string('*', 20));  return null;  }   public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)  {  MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue);  reply = buffer.CreateMessage();   Console.WriteLine("Before Send Request:");  foreach (MessageHeader header in reply.Headers)  {  Console.WriteLine(header);  }  Console.WriteLine(new string('*', 20));  }   #endregion

感谢各位的阅读,以上就是“WCF行为扩展怎么实现”的内容了,经过本文的学习后,相信大家对WCF行为扩展怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: WCF行为扩展怎么实现

本文链接: https://lsjlt.com/news/292677.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • WCF行为扩展怎么实现
    这篇文章主要讲解了“WCF行为扩展怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF行为扩展怎么实现”吧!WCF以其灵活的可扩展架构为开发者提供了方便,其中WCF行为扩展或许是应用...
    99+
    2023-06-17
  • php7扩展类怎么实现
    小编给大家分享一下php7扩展类怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在php7中,有许许多多的扩展类,今天我们就以person类为例实现doin...
    99+
    2023-06-20
  • HTML5怎么实现Javascript API扩展
    本篇内容主要讲解“HTML5怎么实现Javascript API扩展”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5怎么实现Javascript API...
    99+
    2024-04-02
  • 怎么进行Node.js扩展开发
    这篇文章主要讲解了“怎么进行Node.js扩展开发”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么进行Node.js扩展开发”吧!为什么要开发Node.j...
    99+
    2024-04-02
  • kafka可扩展性是怎么实现的
    Kafka的可扩展性是通过以下几个方面来实现的:1. 分布式架构:Kafka采用分布式架构,数据被分成多个分区(partition)...
    99+
    2023-08-12
    kafka
  • java虚拟扩展方法怎么实现
    这篇文章主要介绍“java虚拟扩展方法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java虚拟扩展方法怎么实现”文章能帮助大家解决问题。1、Java8允许在界面中实现特定的方法,只需在方法...
    99+
    2023-06-30
  • MongoDB分片与扩展性怎么实现
    MongoDB的分片功能是通过将数据分布到多个服务器上来实现扩展性。在MongoDB中,分片集群通常包含3个组件:路由器、分片服务器...
    99+
    2024-05-07
    MongoDB
  • CentOS7怎么为PHP安装MSSQL扩展
    小编给大家分享一下CentOS7怎么为PHP安装MSSQL扩展,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、下载 freetds依次执行以下脚本:cd&nbs...
    99+
    2023-06-15
  • centos系统上怎么为php安装imagick扩展以及magickwand扩展
    这篇文章主要介绍“centos系统上怎么为php安装imagick扩展以及magickwand扩展”,在日常操作中,相信很多人在centos系统上怎么为php安装imagick扩展以及magickwand扩展问题上存在疑惑,小编查阅了各式资...
    99+
    2023-06-10
  • NoSQL数据库的扩展性怎么实现
    NoSQL数据库的扩展性可以通过以下几种方式来实现: 水平扩展:通过在集群中添加更多的节点来实现数据库的水平扩展。每个节点可以负...
    99+
    2024-05-07
    NoSQL
  • Linux下怎么为PHP添加扩展库
    在Linux下为PHP添加扩展库可以通过以下步骤完成:1. 安装扩展库开发工具和依赖项。在终端中执行以下命令安装必要的工具和依赖项:...
    99+
    2023-08-18
    Linux PHP
  • golang怎么扩展
    近年来,Golang已成为越来越多程序员的首选编程语言。与其他编程语言相比,Golang的高并发性和良好的性能表现使其在大规模分布式系统中获得了广泛应用。随着企业对软件系统要求的不断提高,扩展Golang也成为了一项重要任务。那么,如何扩展...
    99+
    2023-05-14
  • 怎么在java中实现虚拟扩展方法
    这期内容当中小编将会给大家带来有关怎么在java中实现虚拟扩展方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2....
    99+
    2023-06-14
  • 怎么利用Qt实现可扩展对话框
    这篇文章主要介绍“怎么利用Qt实现可扩展对话框”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用Qt实现可扩展对话框”文章能帮助大家解决问题。可扩展对话框通常用于用户对界面有不同要求的场合。通常...
    99+
    2023-07-02
  • BeanUtils.copyProperties扩展--实现String转Date
    BeanUtils.copyProperties(target,source)和PropertyUtils.copyProperties(target,source)都能将源对象的属...
    99+
    2024-04-02
  • 在centos7中怎么为php7安装redis扩展
    这篇文章主要介绍在centos7中怎么为php7安装redis扩展,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!下载redis下载redis,解压,编译:$ wget http://downloa...
    99+
    2023-06-15
  • 怎么为Python写一个C++扩展模块
    今天小编给大家分享一下怎么为Python写一个C++扩展模块的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。源代码和往常一样,...
    99+
    2023-07-06
  • jQuery中怎么实现调用WCF
    这期内容当中小编将会给大家带来有关jQuery中怎么实现调用WCF,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、我们首先建好一个项目,在VS2010中,建立好一个We...
    99+
    2024-04-02
  • WCF数据契约怎么实现
    本篇内容主要讲解“WCF数据契约怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“WCF数据契约怎么实现”吧!在WCF服务编程中我们知道,WCF数据契约定义了远程访问对象和可供调用的服务操作...
    99+
    2023-06-17
  • Ubuntu安装、配置Redis及phpredis扩展怎么实现
    这篇文章主要介绍“Ubuntu安装、配置Redis及phpredis扩展怎么实现”,在日常操作中,相信很多人在Ubuntu安装、配置Redis及phpredis扩展怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作