Edi Wang

.NET and Azure Developer

All Posts

简单粗暴有效解释ASP.NET中的线程池是怎样处理Http请求的

自从有了.NET 4.5,我们又多了一个装逼语法:async,await。但如果错用就会装逼不成反变傻逼。首先我们得明白在ASP.NET中async await所针对的问题,这样才能正确的装逼。于是我们就不得不先研究一下线程池。 在IIS服务器上,处理Http请求的是线程,和Windows的其他软件一样,干活的永远是线程,而不应该说是进程。一个线程同时只能处理一个request,而web上的request不可能同时永远只有一个,所以线程需要和他的小伙伴们一起组成线程池,才能保证网站的响应。当一个线程处理完了手头的请求,它就被释放掉了,于是如果再有新的请求进来他就能再去处理。但如果当线程用完了,并且他们正在处理的请求都没完成,网站就卡住了,用户就只能等出翔。这时候IIS就会返回一个HTTP 503爆给用户。 打个比方,IIS服务器就好像银行,Http请求就好像顾客,银行开的窗口数量就是进程池 …
IIS Async Async Await Thread

我在《上海轨道交通》应用中是如何解析XML数据的

本文针对.NET初学者介绍LINQ TO XML,你会看见很多为了通俗易懂而故意描述得不专业的语句,所以高手勿入!本文介绍的方法不只针对WP,其他任何.NET项目也可以参考。 我在Windows Phone平台上发布的《上海轨道交通》使用的是离线XML作为数据存储。好处是不需要安装任何三方库,.NET自己就有能力解析。如果用JSON装逼还得下载JSON.NET呢。又因为都是只读数据,也用不着为了装逼而用SQL Lite或SQL CE什么的数据库杀鸡用牛刀。 下面介绍一下如何在工程里内嵌XML文件并解析到对象的一般方法。 《上海轨道交通》的XML文件保存的是所有的站点信息,单个节点看起来就像这样: 由此可见,一个站点包括了多个 …
C# XML

Windows Phone 8 开发:地图应用测试正常发布后爆掉的解决办法

最近更新了一次我的《上海轨道交通》App,结果爆了。为了加入街区图功能我用了WP自带的Map控件,并且也申请了正确的API Key,发布之前在模拟器和真机上测试一切OK,结果发布后就是这个样子的: 具体的异常信息是: Cannot create instance of type 'Microsoft.Phone.Maps.Controls.Map' [Line: 84 Position: 38]Exception from HRESULT: 0xD0000022 根据之前的经验,这像是没有在AppManifest中打开需要的权限。可是我分明已经勾选了ID_CAP_MAP了,还需要什么权限呢?最后经过一番苦逼的研究,在MSDN上看到了这样一个警告: 你TM在逗我?VS居然在我部署测试程序的时候偷偷把这个capability选上了而不告诉我一下!我的App设计的目的就在于尽量不要使用网络。 …
Windows Phone

Live to Code: Windows Phone开发,让我感受不一样的天地

我是一个疯狂的软粉,也是微软产品十几年的老用户,2012年毕业参加工作之后接触到了许多微软的前沿技术,对微软产品更加爱不释手。在用Windows Phone以前,我用的是一款中端的Android手机,Android系统虽然软件丰富多样,但它非常耗电,系统也经常卡得受不了,还中过两次毒,于是忍无可忍之下我换了一部诺基亚720,终于凑齐了微软的三个代表:Surface,Office和Windows Phone。 其实我的主要工作是开发ASP.NET网站,自己的博客也是一路走来从WebForm 2.0维护到现在的MVC 5.1,然而相比ASP.NET开发,WP让我感觉更贴近普通用户。开发免费、无广告、注重界面和交互的WP应用成为了我的副业。 先前我并没有做过真正意义上的客户端软件,对WP开发充满新鲜感。由于之前的工作中有少许Silverlight和WPF的经验,所以今年年初我看着Channel9 …
Windows Phone Microsoft

Windows Phone 8 开发:应用崩溃时给作者发送错误报告邮件

我们的应用难免会爆,但是手工在各个方法上加try...catch...未必能cover到所有场景,有时候我们不希望应用吞掉错误,发生严重异常时,我们应当允许应用在用户面前爆掉。如果没有处理这些异常,应用程序的表现就是闪退。比较好的做法是在应用崩溃时给用户一个选择是否发送邮件告诉应用作者崩溃的详细日志。对于作者来说,等待DevCenter的异常报告相对而言比较被动。如果能在应用崩溃之后立即得到回馈那就可以尽早修复问题。 做法很简单,和ASP.NET网站在Global.asax中使用的全局错误处理类似,WP应用也有个全局错误处理的事件。 打开App.xaml.cs,定位到Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)事件处理函数上。 当任何未处理的异常产生时,这个函 …
Windows Phone Exception

How to Wrap Event-based Asynchronous Method into Task-based async Method

自从.NET4.5推出async/await语法,我们又多了一个炫耀的工具,可以用它来炫耀自己的编程水平,然后再嘲笑Java。然而,有些老旧的API只提供了基于事件的异步方法,而没有提供返回Task的异步方法,这会影响我们的炫耀效果。就像Windows Phone 8的webclient,只提供了基于事件的DownloadStringAsync方法,写的时候就像这样: var client = new WebClient(); client.DownloadStringCompleted += (s, e) = { ... }; client.DownloadStringAsync(...); 为了保住我们的逼格,大微软早就为我们提供了解决方法:TaskCompletionSource,非常适合把基于事件的异步封装成Task方法。这个类型返回是一个可以被await的Task,事件 …
.NET Async Async Await

Windows Phone 8 LongListSelector按拼音首字母分组

Windows Phone 8的LongListSelector控件按拼音分组主要有两种方法,一个是在数据源里手工指定拼音首字母字段,作为index,这种方法效率高但会造成数据冗余不宜维护。另一个就是我今天介绍的方法,来自MSDN,虽然官网例子是针对是英文数据的首字母分组,但其实稍微改一下还是是支持中文的。 首先给大家看看分组的效果,和WP人脉应用按联系人拼音首字母分组的意思是一样的: 实现方法很简单。首先你需要一个来自MSDN的AlphaKeyGroup类,代码如下(我稍作了代码风格上的改动,编译结果和MSDN官网是一样的,不要在意这些细节): public class AlphaKeyGroup : List { /// /// The delegate that is used to get the key information. /// …
Windows Phone

Use GB2312 encoding on Windows Phone 8

如果你在WP开发中遇到过中文乱码,多数原因就是编码问题。比如用webclient获取远程网页的内容,如果目标网页是GB2312编码的,那你取得的很可能是乱码。就像这样: 虽然webclient的构造函数支持传递编码方式进去,但WP默认Encoding枚举中没有GB2312编码: 聪明的你可能会用Encoding.GetEncoding(“GB2312”)强撸,结果灰飞烟灭: 好在这个问题已经有高手给解决了。只要添加这三个文件到项目中去就能直接使用。 big5.bingb2312.binDBCSEncoding.cs 这些文件在我的SkyDrive共享上都能下载到。https://skydrive.live.com/?mkt=zh-CN#cid=E0A43B71445444C5&id=E0A43B71445444C5!10177 之后,你就可以通过这个方法获取GB2312编码了:   …
Windows Phone Encoding

Using FontAwesome in Windows Phone 8

FontAwesome是Web开发人猿常用的一套图标库,它将369个图标制成了字体,能够矢量缩放、自由配置颜色。但是Windows Phone开发常用的界面技术是xaml,不是html,是不是就无法体验FontAwesome了?当然不是!由于FontAwesome是个字体库,WP是可以整合字体的,所以通过简单的步骤依旧能在WP上用FontAwesome的图标。 首先,和在网站中使用一样,要去FontAwesome官网(http://fontawesome.io/)下载最新的包,解压后得到5个字体文件,我们只需要“FontAwesome.otf”。将它复制到你的WP项目中,一般作为资源文件,我们习惯将它放到Resource文件夹下。 然后选中FontAwesome.otf,在属性窗格中,把Build Action改成Resource 之后要立即Build一下,然后回到xaml里,试试给 …
Windows Phone

TechEd 2013 China微软技术大会回顾

去年12月我怀着无比激动的心情参加了微软在中国举办的TechEd2013大会。我参加的是上海场。作为一个微软脑残粉,我当然也是自掏腰包购买的门票。虽然6折的门票也要1600多,但是为了让自己感受微软的气息,我还是咬牙买了这张票。 我最早关注TechEd是2011年在Channel9上看的。虽然对于我这样的屌丝程序员来说,更感兴趣的应该是BUILD大会,然而BUILD似乎每次都只在美国开,而且门票就要2500多美元,所以肯定是无缘了。相比之下,TechEd的内容通常更多样化一些,不仅有开发者的内容,也有IT管理、系统部署等课程,可以让你更轻松的帮妹子修电脑,收更多的好人卡。更重要的是,它是“全世界巡演”的。所以同一年的TechEd会有North America、Australia、Japan等版本。它们的主题和内容却基本一致,因此这次在中国的TechEd2013很大一部分内容对我来说并不是 …
Microsoft