zoukankan      html  css  js  c++  java
  • WCF入门 (14)

    前言

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

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

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

    表内容如下:

    微信截图_20151014232023

    直接上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 
    

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

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

    QQ截图20151014234119

    好了,言归正传,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。

  • 相关阅读:
    第1章 CLR的执行模型
    第19章 可空值类型
    Servlet 3.0 特性
    java代码逆序输出再连篇
    java代码逆序输出数字
    java代码实现从键盘输入编号,输出价格,并且不再编号内的,无效输入!!!!
    java代码,实现输入编号,输出对应水果的单价~~~~
    java.输入水果的编号,求它对应的单价
    java.控制次数,每一组数都要计算。所以有个嵌套
    java练习,,,从键盘输入次数,输出最大值,和
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/4881230.html
Copyright © 2011-2022 走看看