WCF入门 (14)

前言

上周去面试,跪了,这一年没什么长进,还是挺惭愧的。

得到的评语是:想的太多,做的太少。

做了一份面试题,最后一题是数据库的,写个查询。要查出Score有两次及两次以上超过79的Name和他的最高得分,同时显示超过79分的次数。

表内容如下:

直接上Sql答案了。

两种写法:

1. 最简单的方法,好像是万能的,表不断嵌套

select * from (
	select Name, max(Score) as maxScore,count (name) as cnt from (
		select * from Student where Score>79) 
	as S1 group by Name) 
as S2 where S2.cnt>=2

最内层筛选出分数大于79的,取个别名S1,然后把S1结果用Name分组,然后得到每组的Name,max Score, count(name),然后结果取别名S2,然后用cnt过滤S2的cnt,得到超过2次的结果集合。

2. 用个with 来写CTE,然后用一下having关键字。

with S1 
as 
(
	select * from Student where Score >79
)

select name, MAX (score) as maxScore, COUNT (name) as cnt from s1 group by name having COUNT (name)>=2 

写法好看了点,效率我也不知道怎么分析。。。有同学愿意帮忙分析一下效率吗。。。

执行上面两个查询,结果如下:

好了,言归正传,WCF入门。

第14集 实现IExtensibleDataObject接口所冒的风险 Risks of implementing IExtensibleDataObject interface

上一集,我们给DataContract 实现了IExtensibleDataObject接口,这个接口的ExtensionData属性可以用来保存客户端传过来的额外的内容,当服务端把实体类序列化成xml回传给客户端时,会一并序列化这个属性里面的内容,就可以避免客户端的数据丢失。但是,这样做有个缺点:

  容易被DoS攻击,因为这些额外的数据是保存在内容中的,如果客户端传过来一个较大的Object,那样就会在服务器上占用大量的内存,服务器会因为内存不够而无法提供正常的服务。

所以,现在的问题就是如何关闭这个特性。有下面几种方法。

1. 最简单的,DataContract类不实现IExtensibleDataObject接口,或者说移除DataContract类的IExtensibleDataObject接口实现,这样做可以是可以,但是假如我们有很多个DataContract都实现了这个接口,那么就要所有的都移除,比较麻烦。

2. 改配置文件的方式。 如下:

    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <dataContractSerializer ignoreExtensionDataObject ="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

给behaviors节点dataContractSerializer 增加一个ignoreExtensionDataObject ="true".

3.同理,也可以通过编程的方式实现。

[ServiceBehavior(IgnoreExtensionDataObject=true)]
public class EmployeeService : IEmployeeService
{...}

这集就这么点东西,Thank you。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

数据库专题(三) ——Mysql ID生成器

数据库专题(三)——Mysql ID生成器 (原创内容,转载请注明来源,谢谢) 注:本文是我对ID生成器的见解,如果有偏差欢迎指正。 一、需求 在数据库中,...

35880
来自专栏前端说吧

vue - 生命周期第二次学习与理解

15150
来自专栏青玉伏案

设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

在此先容我拿“小弟”这个词来扯一下淡。什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”。在上面一篇博文我们完整的介绍了...

247100
来自专栏极客慕白的成长之路

信息安全实验室招新试题和完全解析

写个网页应该是很简单的,不管是静态网页还是带特效的网页。但是有几个问题,需要说明一下。

14330
来自专栏web编程技术分享

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第五节)

495110
来自专栏java一日一条

编写可靠 Shell 脚本的 8 个建议

这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训。事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条。毫不夸张地说...

14120
来自专栏斑斓

漂亮的with,鱼与熊掌可以兼得

假设要加载磁盘上的一个文件,并以二进制形式读取文件的数据。若要从健壮性的角度考虑,需得考虑两种异常情况: 加载文件失败,例如给定的文件路径并不存在该文件 读取文...

39180
来自专栏偏前端工程师的驿站

四则运算核心算法(开源)

前言                                                                              ...

20390
来自专栏Android 技术栈

java 常用十种设计模式示例归纳 | 已打包请带走

一个Demo,集合常用的十种设计模式,每个模式使用易被人们接受的案例讲述,按模式分包,使用设计模式前后对比,界面显示定义讲解,让你更深刻的了解每种设计模式。 ...

4.3K20
来自专栏JackieZheng

Nutch源码阅读进程3---fetch

走了一遍Inject和Generate,基本了解了nutch在执行爬取前的一些前期预热工作,包括url的过滤、规则化、分值计算以及其与mapreduce的联系紧...

23950

扫码关注云+社区

领取腾讯云代金券