WCF REST消息格式(JSON/XML)选择

可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehavior上。WebHttpBehavior属性HelpEnabled和AutomaticFormatSelectionEnabled是“帮助页面”与“自动消息格式选择”这两个特性的总开关。

public class WebHttpBehavior : IEndpointBehavior, ...
{//其他成员    public virtual bool HelpEnabled { get; set; }public virtual bool AutomaticFormatSelectionEnabled { get; set; }
}

WCF 4.0为REST服务提供了帮助页面功能,我们可以通过浏览器访问服务帮助页面的地址得到所有操作的基本信息。但是这个功能在默认的情况下是关闭的,我们需要通过应用在终结点上的WebHttpBehavior行为的HelpEnabled属性开启该功能。

   1: <configuration>2:     <system.serviceModel>3:         <behaviors>4:             <endpointBehaviors>5:                <behavior>6:                    <webHttp helpEnabled="true" />7:                </behavior>8:             </endpointBehaviors>9:         </behaviors>10:         <services>11:             <service name="Artech.WcfServices.Service.EmployeesService">12:                 <endpoint address="http://127.0.0.1:3721/employees"13:                           binding="webHttpBinding" 14:                           contract="Artech.WcfServices.Service.Interface.IEmployees"/>15:             </service>16:         </services>17:     </system.serviceModel>18: </configuration>
二、 自动消息格式选择

REST服务具有两种基本的消息格式(Xml和Json)。在定义服务契约的时候,我们可以通过应用在操作方法上的WebGetAttribute和WebInvokeAttribute指定回复消息的格式。如果没有通过这种方式对消息格式进行显式设置,我们还可以通过终结点行为WebHttpBehavior为回复消息设置一个默认的消息格式。除了这种显示设置方式之外,WCF还提供一种自动消息格式选择机制。

所谓消息格式的自动选择,就是服务根据请求消息来选择一种适合的格式进行消息的序列化。在默认的情况下,这种自动选择机制是关闭的,我们需要通过WebHttpBehavior的AutomaticFormatSelectionEnabled属性开启该机制。具体的消息格式选择机制策略(顺序)如下:

  • 如果作为请求的HTTP消息具有Accept报头,则根据该报头决定回复消息的格式;
  • 如果作为请求的HTTP消息具有Content-Type报头,则根据该报头决定回复消息的格式;
  • 如果在定义服务契约时通过WebGetAttribute或者WebInvokeAttribute对回复消息的格式进行了显式设置,则采用该消息格式;
  • 如果通过终结点行为WebHttpBehavior设置了对回复消息的格式进行了显式设置,则采用该消息格式;
  • 采用默认消息格式Xml(WebMessageFormat枚举的默认值)。

我们同样通过之前创建的EmployeesService的实例来演示消息格式的自动选择机制。如下面的配置片断所示,我们将WebHttpBehavior行为应用到了寄宿服务的唯一终结点上,并且将AutomaticFormatSelectionEnabled属性设置为True。

  1: <configuration>2:     <system.serviceModel>3:         <behaviors>4:             <endpointBehaviors>5:                 <behavior name="webHttp">6:                     <webHttp automaticFormatSelectionEnabled="true" />7:                 </behavior>8:             </endpointBehaviors>9:         </behaviors>10:     <services>11:         <service name="Artech.WcfServices.Service.EmployeesService">12:             <endpoint address="http://127.0.0.1:3721/employees" 13:                       behaviorConfiguration="webHttp"14:                       binding="webHttpBinding"  15:                       contract="Artech.WcfServices.Service.Interface.IEmployees"/>16:             </service>17:         </services>18:     </system.serviceModel>19: </configuration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这些代码对比工具,你都知道吗?屎山别怕

在程序开发的过程中&#xff0c;程序员会经常对源代码以及库文件进行代码对比&#xff0c;在这篇文章里我们向大家介绍六款程序员常用的代码比较工具 WinMerge WinMerge是一款运行于Windows系统下的文件比较和合并工具&#xff0c;使用它可以非常方便地比较多个文档内容&#…

Hadoop分布式文件系统(三)

目录 一、Hadoop 1、MapReduce 1.1、理解MapReduce思想 1.2、分布式计算概念 1.3、MapReduce介绍 1.4、MapReduce特点 1.5、MapReduce局限性 1.6、MapReduce实例进程 1.7、MapReduce阶段组成 1.8、MapReduce数据类型 1.9、MapReduce官方示例 2、YARN 一、Hadoop 1…

上海亚商投顾:创业板指放量涨近2% 全市场超4400只个股上涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡反弹&#xff0c;创业板指午后涨超2%。华为概念股爆发&#xff0c;鸿蒙方向领涨&#xff0c;创识…

原创 | 一文读懂ChatGPT中的强化学习

原文&#xff1a;原创 | 一文读懂ChatGPT中的强化学习 ChatGPT基于OpenAI的GPT-3.5创造&#xff0c;是InstructGPT的衍生产品&#xff0c;它引入了一种新的方法&#xff0c;将人类反馈纳入训练过程中&#xff0c;使模型的输出与用户的意图更好地结合。在OpenAI的2022年论文《通…

多汗症如何诊断?

多汗症的诊断需要综合考虑多个因素&#xff0c;包括患者的症状、病史、体格检查以及相关实验室检查等。 首先&#xff0c;医生会详细询问患者的症状&#xff0c;了解出汗的部位、时间、严重程度等&#xff0c;以便做出初步的诊断。同时&#xff0c;医生还会询问患者的家族史和…

【Docker】Docker安装入门教程及基本使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…

【K8S 云原生】Kurbernets集群的调度策略

目录 一、Kubernetes的list-watch机制 1、List-watch 2、创建pod的过程&#xff1a; 二、scheduler调度的过程和策略&#xff1a; 1、简介 2、预算策略&#xff1a;predicate 3、优先策略&#xff1a; 3.1、leastrequestedpriority&#xff1a; 3.2、balanceresourceal…

Mysql——索引相关的数据结构

索引 引入 我们知道&#xff0c;数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快&#xff0c;因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找&#xff08;linear search&#xff09;&#xff0c;这种复杂度为…

【C++】sizeof()、strlen()、length()、size()详解和区别

sizeof()、strlen()、length()、size()均用于获取字符串长度 length(): C中&#xff0c;length()只用于获取字符串的长度。例如&#xff1a; String str"abcdefg"; str.length()7 size(): 除了与length一样可以获取字符串的长度&#xff0c;还可以获取vetor类型的长…

springboot基于java的小区物业管理系统(保安巡逻绿化消防)设计+jsp

小区物业管理系统采用的是JAVA语言开发&#xff0c;利用MySQL为数据库&#xff0c; 使用IDEA平台来编写代码&#xff0c;框架方面选择的是springbootweb框架&#xff0c;采用B/S结构实现系统。本系统的设计与开发过程中严格遵守软件工程的规范&#xff0c;运用软件设计模式&…

leecode1143 | 最长公共子序列

给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不…

JAVA常见面试题——后端--集合篇

2.1. 在平常工作中常用的集合有哪些 ArrayList&#xff1a; 基于动态数组实现&#xff0c;支持动态增长&#xff0c;适用于查找和遍历操作频繁的场景。 LinkedList&#xff1a; 基于链表实现&#xff0c;支持高效的插入和删除操作&#xff0c;适用于频繁插入和删除元素的场景。…

香港Web3:Web3的新热土

相关推荐点击查看TechubNews 随着区块链技术的快速发展&#xff0c;Web3的概念逐渐在全球范围内受到关注。作为亚洲的金融中心&#xff0c;香港在Web3领域也展现出了极大的热情和潜力。本文将探讨香港在Web3领域的发展现状、机遇与挑战。 一、香港Web3的发展现状 香港在Web3…

合并 K 个升序链表[困难]

一、题目 给你一个链表数组&#xff0c;每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff1a;链表数组如…

AI智能分析网关V4:太阳能+4G智慧水库远程可视化智能监管方案

一、背景需求分析 由于水库位置分散的原因&#xff0c;水库视频监控建设在立杆、布线等方面都存在一定的难度&#xff0c;且需要人力、物力的前期投入和后期维护。目前水库的监管存在一定的问题&#xff0c;管理人员工作强度大但管理质量并不高&#xff0c;人为巡检无法实时发…

GBASE南大通用 访问其他数据库服务器

通过限定数据库对象&#xff08;表、视图、同义词或例程&#xff09;的名称&#xff0c;您可访问外部数据库中的任何 表或例程。 当外部表与当前数据库位于同一数据库服务器上时&#xff0c;您必须以数据库名称和冒号限定对象 名称。例如&#xff0c;要引用不是本地数据库的数据…

【React源码 - Fiber架构之Reconciler】

前言 React16架构可以分为三层也是最核心的三个功能分别是&#xff1a; Scheduler&#xff08;调度器&#xff09;—调度任务的优先级&#xff0c;高优任务优先进入Reconciler(16新增)Reconciler&#xff08;协调器&#xff09;—负责找出变化的组件Renderer&#xff08;渲染…

青龙面板教程

docker安装青龙面板 1.青龙面板 ### 切换到想要安装的目录&#xff0c;执行下面的命令 docker run -dit \ --name ql \--hostname ql \--restart always \-p 5700:5700 \-v $PWD/ql/config:/ql/config \-v $PWD/ql/log:/ql/log \-v $PWD/ql/db…

C++_虚函数表

虚函数表 介绍源码运行结果笔记扩充函数名联编静态联编动态联编 介绍 1.编译器通过指针或引用调用虚函数&#xff0c;不会立即生成函数调用指令&#xff0c;而是用 二级函数指针 代替 1.1确定真实类型 1.2找到虚函数表从而找到入口地址 1.3根据入口地址调用函数(PS:俗称 函数指…

RT-Thread入门笔记3-线程的创建

线程 RT-Thread 中&#xff0c;线程由三部分组成&#xff1a;线程代码&#xff08;入口函数&#xff09;、线程控制块、线程堆栈. 线程代码: 线程控制块 : 线程控制块是操作系统用于管理线程的一个数据结构&#xff0c; 它会存放线程的一些信息&#xff0c; 例如优先级、 线程…