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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?