Edi Wang

Microsoft MVP for Azure

All Posts

C#创建Windows服务入门图解(VS2010)

Windows服务大家都知道,比如Audio、Theme都是大家比较熟悉的服务,他们可以设为自动启动的,并且在注册表的开机自启动项里是没有痕迹的。所以以前曾经用来隐藏过木马。但以前搞的那个木马服务,是通过手工导注册表来做的。从来没正式的开发过一个服务。 之前做的一个项目里有人用Service的方法定时获取远程数据,很犀利,我感觉还是挺有用的。所以今天我也开荒了一下用C#开发Windows服务,正规的体验了一下开发流程。下面就是我做的最入门的例子,MSDN上有类似的教程,但MSDN漏了一些比较重要的步骤,所以大家请看我开荒成功的版本: 首先,在VS2010里建立一个Windows Service项目: 它会提供我们一个默认的Serivce1,可以删掉,换成自己的。比如Fucker.cs,当然,你得把Program.cs里调用的语句换掉: static void Main() { …
C# Service

ASP.NET自定义错误页的正确方法,返回真正状态码而不是200OK

昨天在码页面的时候手写了一次AJAX,顺便发现了一个问题。我在ajax的脚本里检查http的返回状态是不是200OK以此来判断ajax是否执行成功。结果发现网站里所有的404、500页面均返回200OK,我蛋都碎了。用Firebug检查了一下,确实如此。这是自定义错误页的问题。如果用了html静态页作为错误页,比如404.html,通常我们的web.config里会这样写: 这段配置是给IIS7的,以往写在customError里,其实问题是一样会出现的。这样写的问题就在于,如果遇到了404错误,它确实会返回我们的404.html,但状态码却不是404。这样搜索引擎会认为这是一个网站中已存在的页面并收入索引,如果被人搜到,搜索预览里会直接显示我们错误页的内容,非常傻逼,会被人笑了。不信可以用firebug检查一下: 而正确的结果应该是返回404状态
ASP.NET

ASP.NET中使用Razor导致自定义Membership失效的解决办法

最近在研究Razor和MVC,打算逐步把博客用Razor重写一边。今天一上手就碰到个蛋碎的问题。不管是在MVC应用程序,还是传统的WebForm项目中添加Razor页(既.cshtml类型的页面),就会导致自定义的Membership Provider失效。如果去掉Membership的配置则一切正常。 具体问题表现在有两个地方报错: 1. 运行时报错:Parser Error Message: Default Membership Provider could not be found. 2. 编译时报错:Error    58    The pre-application start initialization method Start on type System.Web.WebPages.Deployment.PreApplicationStartCode threw an …
Membership Razor Web.Config

给编程初学者的建议

本人出于兴趣驱使,从初中就开始研究计算机及编程,但我不是神童,我没有写过9000个软件,也没有90天写过40w行代码,我只是自认为对编程稍有门路罢了。如今快毕业了,在一家挨踢企业实习。在学习的道路上经历了很多,也感悟了很多——编程以外的道理。有些现象让我看在眼里,疼在蛋上。因此我决定撰文,旨在引导编程初学者一个正确的学习方式,帮助他们少走弯路。本文适合大一新生,以及对编程有兴趣的同学阅读。如有意见,欢迎到我邮箱拍砖。你为什么要编程 兴趣第一 我必须要说的是,据我观察,以及自身体会发现,要想学好编程,最好的前提条件就是兴趣。但不是每个学编程的人对此都有兴趣,并且,要让一个没有心思研究编程的人静下心来学习这门需要大量时间和精力才能入门的学科,是相当难办的。我的重点不在如何教你去培养兴趣,我不是教育砖家。我要说明的是,如果你有兴趣,那恭喜你,你一定可以学
Programming

JQuery文本框自动完成,通过AJAX调用ASP.NET WebService

最近在搞博客搜索框的自动完成功能,用的是JQuery UI里的autocomplete插件。插件的数据源是用AJAX调用一个WebService,网站后台有个标签库,WebService返回的是符合条件的标签。最终效果如下: 我们先来看WebService的代码,方法很简单: [WebMethod] public List GetAllTagsForAutoComplete(string tagName) { return optTag.GetModelList().Where(p => p.Name.ToLower().StartsWith(tagName.ToLower())).ToList(); }  这个方法的作用是根据输入的内容,检索所有以tagName开头的标签。我没有返回全部标签,是因为autocomplete插件的默认行为不符合我的需求。在默认情况下,如果我输入 …
AJAX ASP.NET AutoComplete jQuery WebService

JQuery AJAX读取ASP.NET WebService泛型方法

这几天在研究JQuery和WebService,被泛型返回类型搞死了。查了很多资料做实验终于搞定了。网上很多垃圾文章的作者都不亲手实验就到处拼凑把东西发上来,太不负责了。下面我发的是100%可用的,经过亲手实验的代码。 首先在WebService上要注意一点,一定记得把[System.Web.Script.Services.ScriptService]这行取消注释,这样脚本才可以调用到WebService。如图: 我用来测试的是我网站的友情链接列表,其WebService方法如下: [WebMethod] public List GetFriendLinks() { return new EdiBlog.Core.FriendLink().GetModelList(); } 经过测试,在浏览器中用GET访问是会爆掉的,所以我们用POST方法去调用。在默认的IIS和ASP. …
AJAX ASP.NET jQuery WebService

如何在VS2010里更改TFS的本地映射路径

今天GET一个项目文件的时候爆了,TFS说不允许路径长度超过256个字符。用户体验实在不好。无奈只能换个路径了。但显示路径的地方直接点击,是打开文件夹,而没有更改路径。研究了好久这个设置终于搞定了。这什么用户体验! 1. 在Workspace的下拉列表里,选择Workspaces... 2. 在弹出的对话框中选择Edit 3. 然后,就可以更改Local Folder的位置了 4. 最后,系统会建议你GET一下,于是重新GET就好了 关于TFS命名限制的描述可以在MSDN里找到: http://msdn.microsoft.com/zh-cn/library/aa980550%28v=vs.100%29.aspx
TFS Visual Studio

Use Visual Studio to Remotely Debug Program on a VMWare Virtual Machine

I'm using VMWare8, and I was given a Visual Studio plug-in when I installed it, which seems to be used for cross-machine debugging. That is, debugging the program in the virtual machine on the VS of the host, it looks very awesome, so I studied it a little. Here's how to do it. I've built a very simple console program to demonstrate. Breakpoints are added to the main function entry point. Step 1: Start the virtual machine, I use an XP virtual machine, remember to install VMWare Tools, to debug. .NET programs also need to install the corresponding .NET Framework.
Debug VMWare

ASP.NET制作基于的XML导航栏

首先说明,本文为照顾刚入门的新手,有些地方可能会稍微说点基础的东西,高手可以直接忽略。 场景:以前做网站的时候,导航栏的链接都是写死在页面中的,这样不易与维护。于是今天写成了用XML配置的导航栏。用到了LINQ to XML。 先介绍一下功能: 储存导航栏信息的XML文件如下: Title是显示名称,Link是URL,OrderId表示排序的序位,Enabled为是否启用。这个菜单将最终被解析为一个ul列表: Shitter Shit Shitting Shitfully 然后我们来看看如何实现: 首先需要给菜单创建一个只包含属性的模型类,它的作用是成为对具体某一个菜单项的描述,系统中传递的将是这样一个模型: public class MenuItem { …
ASP.NET XML

ASP.NET:如何把ashx写到类库里并在页面上调用

最近在调整博客的架构,进一步把表现和业务分离,所以要把之前用ashx搞的那些Http Handler放到类库中。在类库中建Http Handler的操作很简单,就是添加一个普通的类,然后把之前ashx里的代码几乎一模一样贴到这个类中。但要注意命名空间和类名,因为之后我们会用到。 样例Handler: namespace EdiBlog.Core.Web.HttpHandlers { using System; using System.Web; public class ExampleHandler : IHttpHandler { public bool IsReusable { get { return false; } } public void …
ASP.NET