随笔分类 - 我思故我在
专用于提出各类诡异的,看起来不太可能的,但是有些似乎合理的假说
合并批量请求
摘要:前一段时间,碰到一个问题,后端提供的API是批量接口,允许在一个HTTP请求中放上N个业务上的请求,一起处理,完成后一起返回,但是我们的前端又是以单个请求为主,这样势必导致很多http请求仅仅包含单个业务请求,大量的把带宽浪费在http head,以及把cpu浪费在http协议的解析上,而改写现...
阅读全文
在finally中调用一个需要await的方法
摘要:最近在把code改写成async+await的形式,发现有些情况下需要在finally中需要调用异步方法,但是编译器不允许在cache和finally中出现await关键字。。。但是用Wait()或者Result又会导致一些其他稀奇古怪的毛病(死锁啦,AggregateException啦。。。...
阅读全文
当泛型方法推断,扩展方法遇到泛型类型in/out时。。。
摘要:说到泛型方法,这个是.net 2.0的时候引入的一个重要功能,c#2.0也对此作了非常好的支持,可以不需要显试的声明泛型类型,让编译器自动推断,例如:1 void F(T value){}2 //...3 int i = 0;4 F(i);此时,编译器可以自动推导出这里的T就是int,这极大的方...
阅读全文
加载时预防并发执行
摘要:最近代码里面写了一个缓存,有了一个简单的想法:通常我们会有一个Cache(例如:MemoryCache)去缓存一些对象,那么当这个缓存项过期时,可能同时有很多线程都需要这个缓存项,那么就会有并发的去加载的情况发生,当然,如果这个加载时间并不长的话,那也没什么问题,但是如果加载过程本身比较慢,又比较消耗资源的话,恐怕就比较杯具了。那么如果能让Cache不命中时,加载过程能串行,那么也有个问题,不通的缓存项在加载过程中其实不需要串行,这样整体的效率又会下降。于是,我思考了一种既能每个资源串行加载,又能保证不同资源并行加载的方式。简单的看就是:这里用到了一个loader task,问题是这个load
阅读全文
.net框架中少有人知的扩展cmod
摘要:最近在利用metadata api抽取.net的原数据信息,发现了不少“坑”,也发现了不少常年用着c#的人都不知道的扩展。 说到.net原数据的可扩展性,第一个让人能想到的就是CustomAttribute,这个功能确实强大,从根本上改写了众多框架的形式,连java也不得不抄袭了一份,不过,这个相信大多数人能知道,没什么必要细说。 今天想说的是.net中的custom mod,听到这个,我相信大多数用着c#的人的第一反应是:这是啥?确实这个东西在c#中几乎没人会提起,不过,我们却在不知不觉中使用了。 什么是cmod,cmod是对一个类型做特殊定制,使运行时能够把本质上的相同类型但是cmod不.
阅读全文
线程安全——你忽视了么?
摘要:好久没写blog了,今天还是想写一下关于线程安全的问题。从我以前的blog中可以清楚的知道,我是比较反对使用singleton模式的。这里我只是想举一个非常简单的例子来说明singleton带来的问题很可能比我们想想的要严重的多。话说我反对使用singleton的主要原因是,singleton的提供者通常无法很好实现线程安全,要么对线程安全的认知,要么干脆认为线程安全什么的无关紧要。那么一个线程不怎么安全的代码到底会出现写什么问题那?例子1——Random先来看看这段代码: 1 using System; 2 using System.Threading; 3 4 namespace Not.
阅读全文
wcf rest服务启用gzip压缩
摘要:在IIS上添加gzip压缩已经不是什么新鲜事情了,但是如何在自host的wcf上对rest响应支持gzip压缩哪? 乍一看这个命题还真的有点难,但是wcf框架本身相当强大,拥有众多的介入点,只要正确的介入binding和behavior就可以很简单的达到目的准备Binding 首先,因为需要修改输出结果的编码,那么不可避免的需要修改Binding,如果熟悉WCF的Binding模型的话,可以很容易的将传统的wsHttpBinding,webHttpBinding,netTcpBinding等分解,由于目标是rest服务,因此传输层使用http方式,即:HttpTransportBindin..
阅读全文
Sliverlight调用Rest服务的一点思考和实践
摘要:最近在写一个SL的小工具,用于图形化编辑一些东西。刚好调用的服务是WCF的Rest方式,于是就碰到了在SL里面直接调用Rest服务的问题,本来Rest服务就是只要有url和内容就可以直接调用的,事实上如果搜索该主题,也可以得到漫山遍野的WebClient方案。不过看看Framework下的WebChannelFactory<TChannel>这个类(这个类型在SL下面不支持...),又感觉用WebClient方式太寒酸了点。。。 这里讨论的前提是: 已经有Rest服务的契约 不想自己去拼请求 期望的结果应该是类似与调用WebService的方式。 然后,就慢慢开始达成我们的目标吧。
阅读全文
可编程Soap服务宿主的思考
摘要:Soap服务在现在的系统中的作用不可忽视,当然WCF把Soap服务扩展了些新的协议。按照传统的方式写Soap服务固然不错,但是在更新和发布方面也存在着一些传统的问题,而且在升级时通常无法做到热升级。 那么能不能开发一个Soap服务的宿主,由这个宿主提供一个Soap服务的执行环境,并且提供更新Soap服务的定义并且提供隔离的执行环境,这样在升级时,就可以实现无缝的热升级。 然后,自己写的Soap服务宿主的性能肯定比IIS之类的宿主性能要差,不过,由于很多企业级服务其实不是最关注性能方面的问题,因此,这方面应该不是大问题。 另一方面,自己的宿主如果实现了一些合适的服务分派策略(例如:服务升级版本.
阅读全文
Grammatica简介
摘要:上个月说到了自定义语言,不过在确定自己的语法后,遇到的第一个难题便是如何解析自己定义的语言,至于如何执行,是这之后的事情。找一个语法解析器 软件中有一点很重要,不要重复造轮子,等等,这话听起来有点怪,自定义语言不也是重复造轮子么? 好吧,我承认我在重复造轮子,不过我的主要目的不是让自己的语言怎么怎么样,而是去更深入的理解那些编程语言,要是运气好,自己找的轮子能够流行起来,那自然更好了。 因此,我要造的是语言,而不是语法解析器,所以不要重复造语法解析器,没有那个时间和精力去消耗在这上面。 所以,随便找了个语法解析器:Grammatica 那么为什么用这个而不用其它的?好吧,没有理由,仅仅是因为.
阅读全文
部署在wcf rest服务上的wcf rest服务调用页面程序
摘要:WCF的rest服务已经不是什么新概念了,不过,最近做了一个rest服务(Host在windows服务上),缺发现没有人调用,于是自己做了一个简单web界面,调用rest服务的一些方法,同时又不想因为这个简单的界面再部署一个IIS之类的重量级服务,于是就产生了这么一个非常绕口的想法:在wcf rest服务上部署一个(套)页面,用来测试wcf rest服务自身的一个(或几个)方法 本文这个非常绕口的题目,也就是起源于这个非常绕口的想法。关于rest服务的优势 在开始说正文之前,先说说在我理解中的rest服务与一般的Soap服务相比的优势。 首先,如果rest服务的某个方法是get方式的,在url
阅读全文
快速类型判定
摘要: 最近在写一段代码的时候,为了兼容各种未知的类型,以及完成一个根据类型自动分派的任务到对应的处理器时,使用了这样的一个契约: 用一个object数组来转递值,每个处理器则声明一个可以处理的类型组合。 然后在写如何分派时,发生了一段小插曲。分派原则 首先,明确一下分派的原则,如果处理器声明能处理的类型是:string,int 那么只有当对象数组的长度为2,并且类型分别为string和int时,才会分派到这个处理器上去执行,不过,要注意的一点是,string是引用类型,因此值可以为null,最终,声明为string,int的处理器可以接受下列参数:"aaa",123n
阅读全文
WCF服务端基于配置的实现——路由
摘要:上篇回顾 上一篇,简单的讲了一下WCF里面如何拦截一个操作,不过,只说了一半,因为程序拦截住WCF的一个操作请求之后,并不知道应该去干什么,因此,这个拦截没有发挥它该有的功能。那么怎么才能让我们的拦截发挥作用,并且有能够实现主题——基于配置的实现哪? 思考这个问题的时候,是否想到了在Web上大显身手...
阅读全文
WCF服务端基于配置的实现——拦截
摘要: 如果说到拦截器,相信大家都不陌生,所有的AOP都依赖各种形式的拦截器。为了让WCF服务端的行为发生变化,这里要借助拦截器的力量。 问题:WCF里面如何创建一个拦截器? 事实上,WCF里面有很多种拦截器,分别用于拦截不同的信息。这里要改变的是方法的实现部分,因此,只要拦截WCF操作就可以达到目的。 ...
阅读全文
WCF服务端基于配置的实现——预告篇
摘要: 大家都知道WCF服务有一套复杂的配置,通过配置可以修改WCF的Address、Binding的行为。 那么,服务的实现能通过配置来更改吗? 当然,利用通用的DI框架可以实现,不过,即使不使用任何通用的DI框架,使用WCF一样做到。 那么具体怎么做哪...
阅读全文
XCF之实用篇
摘要:上集回顾 上集中已经实现了XCF的基础,但是不难发现这样的实现没有多少实用意义。 本集的重点就是讨论怎么把XCF实用化。 准备Xsd 想一下如果要定义一个xml来描述,那么需要哪些元素。 首先是一个模板,这个模板描述了请求的总体结构。 ...
阅读全文
XCF之原形
摘要:上篇回顾 上篇提出了个思考,WCF的契约是否可以也基于配置,而不是必须要生成类型,并且从WCF的原理出发点阐述了其可能性,最后提出了XCF的概念。 经过2周的努力,终于实现了一个原形,这一篇里面就讲一下怎么做一个XCF的原形。 实现基础 首先,WCF客户端本身就支持发送任何消息。听起...
阅读全文
关于WCF客户端之ABC全配置的思考
摘要:前言 WCF客户端的ABC中间Address和Binding可以动态配置似乎已经不是什么新鲜事情了,WCF的配置就非常清晰的描述了如何动态配置A和B,但是Contract哪? Contract包含哪些内容 在一个常规WCF下的Contract有下列部分组成: ServiceContract OperationContr...
阅读全文