关闭

WCF中几个容易忽略的知识点

发表于:2012-4-24 09:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:tyb1222    来源:51Testing软件测试网采编

  近来看WCF相关资料 发现之前一些没太关注或者有些错误认识的知识点,有些也貌似不怎么常用。于是整理了这一则笔记。

  1、WCF中的绑定。

  可以通过绑定无参数构造函数实例化绑定,然后调用CreateBindingElements获取到此种绑定的绑定元素。

  1. WSHttpBinding httpBinding = new WSHttpBinding();  
  2. BindingElementCollection collection = httpBinding.CreateBindingElements();  
  3. foreach (var element in collection)  
  4. {  
  5. Console.WriteLine(element.GetType().FullName);  
  6. }

  输入如下:

  如果对WSHttpBinding 更换一下构造函数,如:

httpBinding = new WSHttpBinding(SecurityMode.Transport);

  输出结果如下:

  如果对绑定指定一些配置,如安全配置,则它的绑定元素可能与调用无参数构造函数实例化对象调用CreateBindingElements获取到的绑定元素不同。也就是说对于同一绑定,使用不同的配置可以更改它的绑定元素类型;不管采用何种配置,对绑定来说传输绑定与编码绑定元素这两个是必须的。

  2、终结点契约配置

  配置中的契约contracts不是契约接口的完全限定名,而是ServiceContractAttribute中ConfigurationName指定的名称。如果没有ConfigurationName配置,那么contracts的完全限定名与ConfigurationName指定的名称相同。

  3、UnHandler处理器

  如果在WCF中需要一个能处理所有消息的方法,而不关心SOAP消息的Action。那么操作方法的参数可以指定为Message。这种服务操作在WCF中被称为UnHandler处理器。这种情况下,参数应为Message;返回值为void或者Meaage;

  OperationCOntractAtrribte的Action设置为"*"

  4、WCF序列化中Dos攻击

  WCF使用的序列化器DataContractSerializer在对数据契约进行序列化或者反序列化时,为了防止Dos攻击,在

  DataContractSerializer中使用MaxItemsInObjectGraph设置了每次序列化得对象数量。实际使用的时候可以在实现服务

  契约接口的服务加上ServiceBehavior标签中进行设置。如[ServiceBehavior(MaxItemsInObjectGraph = 60)];或者在serviceBehavior的配置中由dataContractSerializer指定。如

  1. <behavior name="serviceBehavior"> 
  2. <dataContractSerializer maxItemsInObjectGraph="1000"/>   
  3. </behavior>

  5、泛型数据契约问题。

  泛型为OO里的一种概念,而服务是基于SOA的,它没有重载等概念。WCF的默认序列化器DataContractSerializer对

  泛型数据契约的序列化,生成的XML默认的根节点元素名称为:类型名+泛型名1+泛型名2+...+哈希码。

  可以通过指定模板的形式指定DataContractSerializer序列化后的根节点名:{0}{1}...{n}{#}。当然如果能保证数据契约名称不重复,也可以直接在DataContract中通过Name指定。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号