[WCF 4.0新特性] 默认绑定和行为配置
对于传统的WCF配置系统,无论是绑定的配置还是行为(服务行为和终结点行为)都必须具有一个名称。而正是通过整个配置名称,它们才能被应用到目标对象(终结点或者服务)上。而在实际的项目开发中,绝大部分服务或者终结点都具有相同的绑定和行为,如果能够定义一种默认的绑定和行为,这无疑会简化我们的配置。WCF4.0为此提供了一个新的特性以支持默认绑定和行为的配置。 一、 默认绑定配置在传统的配置方式下,如果我们需要对终结点的绑定(不论是系统绑定还是自定义绑定)进行定制,我们都需要配置一个“具名”的绑定,然后将这个名称指定为终结点配置节的bindingConfiguration属性进而将绑定配置应用到终结点绑定上。 比如说我需要采用WS2007HttpBinding作为终结点绑定,并且需要采用Message安全模式和用户名密码认证,我需要按照下面XML片断所示的方式进行配置。首先需要在<bindings>/<ws2007HttpBinding>结点下定义一个具体的WS2007HttpBinding,除了进行我们所需的安全相关配置之外,这个配置的绑定必须具有一个名字(defaultBinding)。然后将绑定的配置名称指定为终结点的配置属性bindingConfiguration,这就意味着终结点采用了配置的绑定。 1: <?xml version="1.0"?> 3: system.serviceModel> 9: </security 10: binding 11: 12: 13: services 14: service ="Artech.NewFeaturesInWcf4.Service.CalculatorService" 15: endpoint address="http://127.0.0.1:3721/calculatorservice" ="ws2007HttpBinding"
二、默认行为配置默认行为配置和默认绑定配置的作用类似,它允许我们在配置中定义不具名的服务行为或者终结点行为。不过在介绍默认行为配置之前,我们还是来介绍传统的服务行为和终结点行为采用怎样的配置方式。 在传统的配置系统下,无论是服务行为还是终结点行为,我们都必须为之指定一个名称。而服务和终结点的配置节都具有一个behaviorConfiguration配置属性,该属性用以设置配置的行为名称。正是通过这么一个配置属性,配置的服务行为能够应用到目标服务上,而目标终结点也能够使用配置的终结点行为。 比如在下面的一段配置中,我们配置两个名称为defaultBehavior的行为。其中一个为终结点行为,它实际上应用了ServiceDebugBehavior行为并将IncludeExceptionDetailInFaults设置为True,这样可以使服务端抛出的异常的详细信息通过错误消息传播到客户端以利于查错和纠错。另一个为服务行为,该行为将默认使用的DataContractSerializer的MaxItemsInObjectGraph属性设置为最大值,以实现对大数据对象序列化和反序列化。这两个行为最终被分别应用到了寄宿的CalculatorService服务以及它的终结点上。 8: behavior 9: 10: serviceBehaviors 11: 12: serviceDebug includeExceptionDetailInFaults="true" 13: 15: >
19: ="Artech.NewFeaturesInWcf4.Contract.ICalculator" ="defaultBehavior" 20: 21: 22: 23: > 如果我们需要将这两个行为定义成默认的服务行为和终结点行为,我们只需像下面给出的配置一样将它们的name属性去掉。在这种情况下,对于该配置作用范围内配置的所有服务和终结点,如果并没有对其behaviorConfiguration进行显式设置,它们将具有对应的默认行为。 17: 18: >
默认行为配置具有一个默认绑定配置所不具有的属性,那就是配置的继承性。我们举个简单的例子来说明默认行为配置的继承性所致为何。假设我创建一个如下图所示结构的用于服务寄宿(IIS寄宿)的Web项目。为了对.svc文件进行结构化的管理,我们对其进行分类,并将同类的.svc文件至于相同的子目录下。在本例中,我们建立了一个Erp的子目录用于存放所有关于ERP相关服务的.svc文件,在这里仅仅具有一个唯一的基于订单服务的OrderService.svc。 读者应该注意到了,在Web项目的根据和子目录Erp中均定义了一个Web.config。这也是很常用并且我个人推荐的配置方式:将公共的配置定义在外层的Web.config中,而子目录下Web.config用于定义在该目录下所有.svc文件对应的服务的配置。现在假设两个Web.config分别具有如下的配置。 WcfServicesWeb.config: ="2147483647" serviceTimeouts transactionTimeout="00:01:00" 12: 13: ="Artech.WcfServices.Service.OrderService" 14: ="ws2007HttpBinding" ="Artech.WcfServices.Contract.IOrderService" 15: 16: 17: >
从上面给出的两段配置我们可以看到,两个配置文件中均定义了默认的服务行为。那么对于基于OrderService.svc的服务OrderService来说,它具有怎样的服务行为呢?实际上,定义在根目录下Web.config的默认服务行为会自动被子目录Erp所继承,所以OrderService具有的服务行为是两者的“合并”,它具有的默认服务行为和下面的配置等效。我们将定义在上级目录下默认行为配置被下级目录继承的特性称为默认行为配置的继承性。同理,所有没有显式设置具名行为的服务和终结点均会继承定义在machine.config中的默认行为。 14: 15: >
[WCF 4.0新特性] 默认终结点
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-2 – 检测到一个有潜在危险的request.form值,但
- 样本代码/代码项目的最佳ASP.NET网站[已关闭]
- asp.net-web-api – Web API嵌套路由无法按预期工作
- asp.net-mvc – 使用Castle Windsor在ASP.NET MVC中实现多租
- ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署
- ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使
- asp.net-mvc – ASP.NET MVC 2中的DataAnnotations – 阻止
- asp.net-mvc-2 – RedirectToRouteResult如何工作?
- asp.net-mvc – 如何首先使用EF核心代码创建连接表
- 用于访问所选ASP.NET复选框的jQuery选择器
- asp.net-mvc – 同步ASP.NET MVC回发回调的问题
- asp.net-mvc – 使用ASP.NET MVC的BlueImp jQuer
- asp.net-mvc – 查找单元测试方向,显示部分视图的
- asp.net – 带有OWIN的Web API会为HttpMessageIn
- asp.net-mvc-3 – 隐藏日期的默认值
- 用ASP.NET MVC阻止ZmEu攻击
- asp.net – ASP .Net Web API下载图像为二进制
- asp.net – 我能指望ctl00_PagePlaceHolder_myId
- asp.net-web-api – owin cors或web api cors
- entity-framework – 数据读取器与指定的模型不兼