REST WCF 4.0 新特性简介
前面几节介绍了REST WCF 3.5的一些基本特性以及使用方式,在WCF4.0的时代,也做了对REST的支持。相比3.5时代,4.0改进体现有如下几点:
- 增加对路由的支持
- 对缓存的支持。
- 帮助(help)页面的改进。
- 消息错误处理
- 消息格式的多样性如(XML\JSON\ATOM\TEXT\BINARY)
- 简化操作。
本节讲述的重点为如何使用路由注册REST服务、缓存以及help页面
1、使用路由注册服务。
WCF4.0中新增的路由服务可以帮助直接注册服务,而不再需要SVC的文件。
需要注意的是,使用路由注册服务时必须启动ASP.NET的兼容模式。即设置aspNetCompatibilityEnabled=True,并且相应的提供服务接口的类。需要将AspNetCompatibilityRequirements 特性添加到服务类型且同时RequirementsMode 设置为“Allowed”或“Required”。否则服务无法使用。启动ASP.NET的兼容模式,可使用ASP.NET的一些特性。
REST WCF即WCF的WEB编程模型中,我们使用的是WebServiceHost,它是ServiceHost(当您没有使用 Internet 信息服务 (IIS) 或 Windows 激活服务 (WAS) 公开服务时,请使用 ServiceHost 类来配置和公开服务以供客户端应用程序使用)的派生类。如果REST WCF没有指定服务终结点地址,WebServiceHost会在服务的基址中自动为 HTTP 和 HTTPS 基址创建一个默认终结点。如果用户指明了服务的终结点地址,则它不会创建。
WebServiceHostFactory在可动态创建WebServiceHost Web宿主实例以响应传入消息的托管宿主环境中提供 WebServiceHost 的实例的工厂。
而采用路由注册服务时,使用的就是WebServiceHostFactory。如下图:
代码如下:
private void RegisterRoutes() { WebServiceHostFactory webServiceHostFactory = new WebServiceHostFactory(); RouteTable.Routes.Add( new ServiceRoute( "Service" , webServiceHostFactory, typeof (Services))); } |
如图示:"Service"为Services类中提供服务的别名。它指明了Web地址的相对URI。使用服务的时候。它是ServiceRoute构造时必须的。
2、缓存
REST WCF中,同样可以通过如同ASP.NET配置缓存的方式来配置服务接口的缓存。如在web.config文件中做如下配置:
<caching> <outputCacheSettings> <outputCacheProfiles> <add name= "RestCahe10" duration= "10" varyByParam= "" /> </outputCacheProfiles> </outputCacheSettings> </caching> [WebGet(UriTemplate = "/" )] [AspNetCacheProfile( "RestCahe10" )] public DateTime GetTime() { return DateTime.Now ; } |
注意:varyByParam在缓存设置中是必须有的。
3、帮助页面
在REST 服务中,已经没有了WSDL文档可以供调用者使用。于是,REST中,通过帮助页告知调用者如何使用服务。在F3.5时代,REST WC
就支持帮助页,在4.0中,有了进一步的改进。
启用帮助页有两种方式。
1、通过在<endpointBehavior>节点的<behavior>设置。如下:
<behaviors> <endpointBehaviors> <behavior> <webHttp helpEnabled= "true" /> </behavior> </endpointBehaviors> </behaviors> |
2、通过新增的standardEndpoints节点进行配置。如下:
<standardEndpoints> <webHttpEndpoint> --><!-- Configure the WCF REST service base address via the global.asax.cs file and the default endpoint via the attributes on the <standardEndpoint> element below --><!-- <standardEndpoint name= "" helpEnabled= "true" automaticFormatSelectionEnabled= "true" /> </webHttpEndpoint> </standardEndpoints> |
帮助页面如下:
点击相应的方法进去后,会详细显示,此方法所使用的HTTP动作,请求、响应等等信息。如下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构