在ASP.NET中如何运行后台任务

[原文发表地址] How to run Background Tasks in ASP.NET [原文发表时间] 2014-08-26 几年前,Phil Haack写了一篇关于ASP.NET中定期后台任务存在的隐患的优秀文章。他指出了一些人们在后台工作时常见的陷阱。您可阅读这篇文章,下面是他帖子里得出的摘要。 在一个线程中,一个与需求不相关的未处理异常将会终止该进程。 如果你在一个Web Farm中运行网站,你大概会以你的应用程序里,试图在同一时间运行同样任务的多个实例结束。 在AppDomain中运行你的网站会因为种种原因而终止,且后台任务也会随之一起终止。 如果你认为你可以自己写一个后台任务,很可能你会进去误区。我并非怀疑你的技术,只能说这太微妙了。而且,你为什么非要这样做呢? 有很多种方式可以让你在后台工作,有很多资源库和选择可利用。 一些ASP.NET应用程序会承载于你的IIS数据中心里,其他的则将承载于在Azure 云上。在我看来,利用率的频谱大致是这样: 通用方法:Hangfire(或者类似的开源资源库)                 用于ASP.NET网站上编写后台任务。 云方法:Azure WebJobs                 一个正规的Azure功能,用来卸载运行于网站之外的后台任务和度量工作量。 高级方法:云服务执行器                 快速测量网站后台进程的数量,并 且你需要调度这些机器。 有很多介绍如何使用Azure WebJobs的优秀文章和视频,也有很多介绍工作者角色是如何在可扩展的Azure云服务中工作的文档,但是介绍关于如何承载ASP.NET应用程序和轻松拥有一个后台服务的不多。这里列举了一些。 WebBackgrounder 正如它所说的“WebBackgrounder是一个web-farm,友好的后台任务管理器的概念证明,意味着它仅仅与一个普通的ASP.NET web应用程序协作。”多年来,它的代码没有公开,但是WebBackgrounder NuGet 包已经被下载了大约50万次。 这个项目的目的是处理一个任务,在web应用程序的后台时间间隔管理一个循环的任务。 如果你的ASP.NET应用程序仅仅需要一个后台任务来运行一个基本的预定时间间隔,那么你可能需要基本的WebBackgrounder知识。 using System; using System.Threading; using System.Threading.Tasks; namespace WebBackgrounder.DemoWeb { public class SampleJob : Job {…

1

Microsoft .NET Portability Analyzer已经做好准备

[原文发表地址] Getting ready for the future with the Microsoft .NET Portability Analyzer [原文发表时间] 12/3/2014 .NET 已经变得越来越开放。不仅仅是.NET Open Source的发展(阅读Announcing .NET 2015 – .NET as Open Source, .NET on Mac and Linux, and Visual Studio Community)而且也涵盖了.Net MicroFramewo, Xamarin Tools 等更多的平台。。 你可以在任何地方运行.NET 代码,有个工具使之变得更加容易。尽管你很难用一个平台得到100%的代码,但是你可以用机智的重构思维得到90-95%的代码,然后保持这个特定的平台处于可插拔式的状态。 .NET Portability Analyzer是一款免费的VisualStudio插件(或者说是控制台应用程序),它可以为你提供分析代码的的详细报告这样你就可以清楚的看到你的代码适用于哪个.NET版本,同时也可以知道怎么和Core CLR进行交互。 例如,看一下关于AutoFac的这份报表。你可以看到大多数平台的主程序集都非常出色。。当然,越特殊的平台配置程序集表现的越糟,但仍然有一个关于哪些方法在哪个平台上是可用的的完整列表,并且是一种清晰的方式。 当你碰到一个缺失的或者不推荐使用的API时,你会得到一个关于正确的方法的建议。 你可以分析指定的程序集或者整个工程。一旦安装这个分析器,你就会看见分析菜单下面的命令,并且你可以在.NET Portability Analyzer 选项下的Tools|Options 菜单改变配置。 你可以从下面地址 http://www.visualstudio.com/free. 更方便地下载免费的 Visual…

0

公告 .NET 2015在Mac,Linux和Visual Studio社区开源啦

[原文发表地址]:Announcing .NET2015-.NET as Open Source, NET On Mac And Linux And Visual Studio Community [原文发表时间]:11/12/2014 它终于到来了。这也是我们大多数人来微软工作的原因,而且我认为这不仅是一个纪元的结束,同样是令人惊叹的事情的开始。 新版的.NET 2015是我们发布的。这也就是我们今天在纽约发生并公告的事情,它其中包含了很多的东西,所以慢慢欣赏吧。 请一定要看看我在最后列的博客,这是我私人汇总并呈现给你们的一些情况。  关于开源和跨平台我们是非常认真的  .NET 核心5是最新的,并通过NuGET发布了组件化的框架。这也意味着你可以和你的应用程序一起发布一个.NET 核心框架的私有版本。其他的应用程序的版本是不能更改你的应用程序的行为的。 我们正在创建一个可以应用于windows, Mac和Linux 的.NET核心CLR, 它同样也是开源的,并且是由微软提供支持。所有的这些都在这里:https://github.com/dotnet。 我们同样正在实现RyuJit 和.NET 核心GC的开源并使他们可以跨平台被使用。 ASP .NET 5可以在任何地方进行工作 ASP .NET 5 很快将支持在Windows, Mac和Linux上使用,这些都会在GitHub上公开:https://github.com/aspnet. 举个例子,对于Mac和Linux来说,.NET 5包含了一个在libuv上叫做Kestrel的网页服务器。它和来自Node的网页服务器是相似的,对于产品来说,你可以使用Nginx控制它。 开发人员会有一个非凡的体验 有一个针对开源开发人员和学生的免费版的Visual Studio叫做Visual Studio Community。它在一次下载之后就可以支持更多的扩展和应用,这并不是Express版本, 基本上是Pro版本。 对于前端开发人员来说,Visual Studio 2015 和ASP .NET 将会支持gulp, grunt, bower和npm。 一个community团队(包括我和来自ASP.NET和web…

0

视频:我的非技术伙伴首次尝试Windows 10

[原文发表地址] Video: My non-technical partner tries Windows 10 for the first time [原文发表时间] 2014/10/23 您可能看过我在YouTube 上的关于如何做一名Windows 8 和8.1 的高效用户的系列视频。我为您做了一个简短的URL,您可以把它推荐给您的朋友和家人 http://hanselman.com/windows8.。它会带您转到一个YouTube的播放列表,这个列表包括了我使用Windows时最好的提示和诀窍。最受欢迎的是“3分钟之内学习Windows 8”,但是如果你正在寻求能使您或者您非技术出身的父母亲来使用时新的Windows 8,那么我推荐阅读“Windows 8: 缺少指导手册”。这个教程逐步得展示并且解释了一切他们需要知道的。 很多人说“Windows 8 不直观”。我想那是在狡辩,因为不熟悉和不直观之间还是有很大区别的。只需要您的几分钟时间,就会让您对 Windows更加“直观”。 不管怎么样,Windows 10即将到来。如果你有额外的机器,那么您可以在这里注册预览版。这还太早,所以请不能把它放到您的主计算机上。 我觉的展示一下聪明但非技术出身的妻子第一次接触Windows 10的经历是件很有趣的事情。这是她运行第一个 Windows 10 技术预览版经历的未剪辑录像。 我鼓励你看看它,她发现“新”功能的方式是相当有趣的,并且也学到一些早在Windows 7 上已有的功能。如果你曾经做了一个易用性测试,那么你会发现用户交互简直令人着迷。 再次,阅览并分享http://hanselman.com/windows8.

0

简介Gulp, Grunt, Bower, 和 npm 对Visual Studio的支持

[原文发表地址] Introducing Gulp, Grunt, Bower, and npm support for Visual Studio [原文发表时间] 2014/9/2 Web 开发,特别是前端 Web 开发,正迅速变得像传统的后端开发一样复杂和精密。大多数项目不仅仅是通过 FTP上传一些 JS 和 CSS 文件。而现在的前端生成过程,可以囊括SASS 和LESS扩展、CSS/JS的压缩包、JSHint 或 JSLint的运行时 、或者更多。这些生成任务和进程都和像Gulp和Grunt这样的工具一起协调工作。此外,类似于npm和bower这样的管理系统将客户端库作为软件包来管理。 ASP.NET客户端软件包的管理者,为什么不用 NuGet?或MSBuild? 你们中的一些人可能会问,为什么JavaScript不使用 NuGet?为什么不扩展 MSBuild 去构建 CSS/JS?原因很简单。因为已经有了丰富的系统,来做这种事情。对于服务器端库 (和一些客户端)来说,使用NuGet 就已经很棒了。npm和bower 上已经有了很多的,而且还会有更多的 CSS 和 JS 库。而对于服务器端的应用程序构建来说,使用MSBuild很棒,但当构建客户端应用程序时,它有些多余了。 所以,两者都可以使用。这些都是您工具包中的工具。添加Gulp,Grun,Bower,npm的支持(和将来需要其他东西) ,这意味着为ASP.NET前端开发者提供了一个更熟悉的环境。它允许 ASP.NET 开发人员引入 JS 和 CSS 库,使他们可以每天使用。 引入任务资源管理器 我们从你们中,以及整个社会收到了相当多的、关于Grunt/Gulp的功能请求。我们利用Visual Studio “14的充分可扩展性正在构建对Grunt/Gulp第一流的支持。现在我们已经准备好将这个支持作为VS2013的一个扩展加入到预览版本中, 并且我们感激您帮助我们测试和考察这个功能。 今天我们介绍一个预览版本,在这个预览版本中,“任务资源管理器”将作为VSIX的一个扩展。同时也推荐两个其他的VSIX来完善对这个功能的体验。 注意:…

0

你没有充分使用资源监测仪

[原文发表地址] You aren’t using Resource Monitor enough [原文发表时间] 2014-08-05 我们曾做过电话调查让非技术相关的人去打开任务管理器,大多数人知道如何使用任务管理器非常快。 当我们转向技术用户时,我们介绍系统内部工具和进程监测器来查明一个磁盘发生了什么。然而,我发现为了快速地搞清楚问题,使用资源监测器能够更快地访问并且更容易解释。 当然,你可以通过右键单击任务栏,然后单击任务管理器的方式来打开任务管理器。或者,使用Ctrl-Alt-ESC快捷键打开任务管理器。 在任务管理器中,你可能从来没有注意过打开性能选项卡底部的资源监控器链接。 点击它,将会对发生了什么事有一个全新的认知。 磁盘 这些都是很棒的,但是我发现自己的查看最多的是磁盘选项卡。 记得要通过读取或写入每秒的字节数进行快速排序。我常常按照总数来排序并且在那经常发现像DropBox一样的东西。 CPU和CPU使用率的服务 任务管理器很棒,但是它不能很容易地显示出一个服务正在使用多少CPU。资源监视器不仅能让您轻松地用一个复选框筛选进程,而且可以使您按照CPU的使用情况对服务进行排序。 在CPU选项卡上有相关句柄的窗格。如果资源监视器是一个被妥善保管的秘密,那么相关处理就是一个在秘密中的秘密。你可以在所有进程中搜索一个打开的文件名(或任何句柄),也可以通过进程或服务筛选。 网络活动 网络活动选项卡是超级有用的,并且信息都是满满的。它使得从一个端口或TCP连接查找一个进程变得容易。 现在你有这个工具和所有的这些视图,我猜你也许不能最充分地使用它。也许你会从找些小程序或是共享软件工具,然后把它们结合起来使用。 一旦我提醒自己,资源监测器可以从任务管理器中直接开启(一个我已经打开好多次的程序)我开始使用它甚至更多。我只需仅仅将其锁定到任务栏!

0

我们站在巨人肩膀上

[原文发表地址] :We are abstracting on the shoulders of giants [原文发表时间] :2014-05-28 我的新项目在三个大洲已经有了数据中心,利用全球负载均衡,能够自如的遍历网络,同时拥有iPhone和Windows应用程序,它写在一个简单的高级语言里,并允许一些令人惊喜的场景来帮助人们快速完成更多工作。 然而真实的故事这样- 真正令我失落的- 并非我和我的搭档编写的无数个软件,而是年复一年我们没能编写的那些软件。 我们通过欧洲,亚洲和美国的多个服务器来实现全球负载均衡网站和服务。 Windows Azure流量管理器会处理这些。 我们把我们的通信协议设置在SignalR的顶端,这是一个使用ASP.NET避免了实时网络的复杂性的开源类库,来为我们处理的NAT 遍历,它基本上为我们去除了网络问题。 SignalR处于HTTP和Web Sockets的顶端, 而这些又处于TCP/IP协议之上。 我们使用RayGun.io来进行错误管理,并在发生故障时在我们的应用程序中获取完整的堆栈转储,这使我们能够经常快速升级,并且给我们的用户一个很好的体验。 我们用InnoSetup安装我们的应用程序,它绝对是一个我曾经使用过的最令人吃惊的应用程序,在这里付费使用。 我们使用ZXing QRCode开源库,来进行QR码的创建。我们丝毫不必担心图像的详情。 我们使用MahApps.Metro UI来使我们的Windows应用程序看起来美观。增加了一些很好用的控件。 而这一切都是使用C#和Xamarin工具集整合到一起的。 iPhone应用程序,Windows应用程序,以及云服务都是C#完成的。 我在软件行业到现在已有20年了,我记得当时写的C语言已经被认为是一个相当高层次的语言。我大致理解了从汇编直至托管代码和延伸到云计算的过程的全部堆栈。今天我们考虑管理虚拟机集群和我们考虑管理字节的时间一样多,这是多么神奇啊。 回想那些我们的应用程序所站立的巨人的肩膀。回想那些你们的应用程序所站立的肩膀。计算机软件的抽象化使我们能够做的如此之多。 我们可以惊叹于谷歌的抽象层。对于许多人来说,那就是互联网。你在文本框中输入一个问题,按下一个按钮,整个世界为你打开,而这仅仅只是这个星球的一小部分,你会真诚感谢让这一切发生的历史进程。 我说的有道理吗?大概没有。这只是我今天突然想到的。听我和计算机科学界的传奇Len Bass在本周的播客上的聊天, 你会对我们每天利用的历史和力量有一种新的感觉。 花一点时间思考你的应用程序在深度和广度堆栈里的值。请感谢和支持你的应用程序用到的工程,无论它是不是开源的。陶醉在其他人创建的抽象层中,并且感谢您所创建的抽象层。他们让所有你使用的LEGO刚刚好是正确的大小,它们在一起会很有趣。 成为一个程序员是一个伟大的时刻。这篇博文是出自myEcho应用程序。

0

清理Windows8.1磁盘空间的指南

[原文发表地址] Guide to Freeing up Disk Space under Windows 8.1 [原文发表时间] 2014-06-09 这篇文章是为“Windows8.1所做的更新”版本,我原来的很受欢迎的文章是清理Windows 7磁盘空间的指南。 我有一个256 GB的 C盘,它是SSD,但是上周我注意到所有的东西加起来,我只剩下了大约20 GB是空闲的,磁盘变得很拥挤。几小时之后,我有了80G的空闲空间。下面就是我怎么做到的。 担保:没有。请仔细阅读你在这篇博客中看到的所有事情,请一定要仔细,因为除了你自己你没法责怪任何人。但是,如果你花费几分钟时间,仔细阅读并且按照做其中 的几个技巧或者只是运行磁盘清理,你将会得到很多的空间。 按住Windows键+W键,然后点击“清理” 。你将会看到几个选项。我们需要做两个事情。 首先“清理这台PC的磁盘空间”,它会全屏开始运行,就像一个“现代应用程序”一样。 在这里你将看到你的Windows Store应用程序,图片,视频等等所占用的空间。 你也可以在这里清空你的回收站。它还会给你一个不错的建议来管理你的个人文件占用空间的问题。         如果你点了“查看我的应用程序大小”,你将会看到下面的界面,在这里你可以快速的卸载应用程序。我不会动100MB以下的任何东西。 现在,运行“通过删除无用文件来释放磁盘空间”,这是磁盘清理桌面应用程序。 这个应用程序是你的主要防线,它将会列出它可以清理的所有东西。请确保以管理员身份运行“清理系统文件”选项来清理磁盘。这样它就可以发现并确定更多的可清理文件。 当你以管理员运行磁盘清理的时候,就像我下面做的一样,它就会清理Windows Update之后的文件。请注意区分上面的截图(正常运行)和下面的截图(点击“清理系统文件”,它将会得到Windows Update之后无用的238MB文件。你也可能发现更多)。           设置你的Windows Store 邮件应用程序只允许下载一个月的邮件。请看上面的邮件是怎么使用514 MB的空间的?那是因为我让它下载我所有的邮件。在Windows 8.1 邮件应用程序中,按Ctrl-C然后点击设置,之后来到你的账户。在你的账户下的选项中,将“从…下载邮件”选项改为上个月或者更近。 禁用休眠状态 – 我有一个桌面,而且我比较喜欢三个电源开关状态,睡眠,打开和关闭。我不用休眠。此外我还有12 GB的RAM,而休眠会使用你所有的RAM磁盘空间。以管理员身份启动命令提示符,键入“powercfg -h off”来回收空间。所以我得到了12GB。这都取决于你,如果你使用休眠功能的话,就不要关闭它。 虚拟内存 – 如果你有8GB或者更多的RAM,那么很有可能Windows会分配比需求更多的虚拟内存作为文件在磁盘上。这样不是不好的,也不是一个错误,仅仅是保守。例如,我有12GB的RAM,Windows就分配一个12GB的“交换文件”。有趣的是,推荐(不知道是对我还是对它本身来说)只分配5GB给该文件 。哈哈,手动改了它,这样我就可以有7GB的空闲。对于500G的盘来说这没什么大不了,但是对于128G的SSD盘来说是有很大区别的。按Windows键+W键,然后进入“高级系统设置”。在那选择性能设置,然后高级设置。在虚拟内存下点击更改。这通常是为你管理的。只有当你知道你在干什么的时候才能更改它。在这里我将它移动到我的D盘,为我的小小的C盘开放空间。 %TEMP%文件 – 尽管磁盘清理是伟大的,但是有时候不管出于什么原因,它不一定总是可以把临时文件夹清理出来。我建议你尝试删除临时文件夹。我是从命令行做这些的。以管理员身份打开一个控制台,输入“cd /d %TEMP%”(当然没有引号)。然后通过命令“cd..”到上一个文件夹,输入“rd…

0

Xamarin.Forms – 编写一次,到处运行,而且是本机的?

[原文发表地址] Xamarin.Forms – Write Once, Run Everywhere, AND Be Native? [原文发表时间] 2014/05/28 我在Nike工作的很多年,使用java编写了一个可以在四种平台上运行的订单管理应用程序。我们曾经经常开玩笑说:“编写一次,到处调试”。这是早期的java, 但现在的事实是,每一个窗体和控件都是“自绘的”,这意味着一个按钮在所有的地方看起来都是一样的,因为它不是一个真实的按钮,当然这会因为操作系统而显示不一样。它只是一个按钮的图片。我们经常使用Spy++和不同的Windows检查程序来探索我们的应用程序,并且他们永远看不到一个java程序的控件。这意味着应用程序在任何地方都能工作的很好,而且总是看起来像是一个java应用程序。它们没有和底层平台整合。 使用MVVM(模型,视图,视图-模型)模式,以及在Windows Phone 8.1和windows 8.1上工作的通用应用程序技术,对于某些类型应用程序,代码共享最高可以达到90%。然而,即使一个简单的应用程序,针对每一个平台,你仍然得创建一个自定义的本机视图。大多数情况下,这是可取的,但是对于某些应用程序,它很让人厌烦的,很容易出错,而且很冗长。 Xamarin今天宣布了Xamarin.Forms,我认为它有效地 把本地控件抽象到一个更高级别的概念。过去,在我的眼里,这非常类似于我当年在java中写的代码-所有的都是以布局和流程背后的流利代码完成的。你创建一个控件树。 Xamarin.Forms是一个新的类库,对于iOS, Android和windows phone, 你都可以从一个单一的,共享的C# 代码库里生成本地的UIs。它提供了400多种跨平台的控件和布局,在运行时可以映射到本地控件,这意味着你的用户接口完全是本地的。 对于我来说,有趣的是这些“控件/概念”(我的术语)在一个很高的级别被编码,但却被当作本地对应的控件。所以在我代码中的“选项卡”在移动设备上被描述为最具体的,并且是本地对应的控件,而不是我JAVA例子里的一个普通的选项卡控件。让我们看一个例子。 我的伙伴,James Montemagno,来自Xamarin,一个喜欢辣椒的人,在一个喝了咖啡的深夜,他把最终的跨平台的Hanselman的应用程序放在一起,来对我说明一些观点。这个小的应用程序是用C# 写的,可以运行在本地的Windows Phone,Android和iOS等系统中。它发表在我的博客和tweets上。 这是视图之前切换的菜单: 和创建它的代码。为了明确起见,我已经简化了一点,但是想法全是MVVM: public HomeMasterView(HomeViewModel viewModel) { this.Icon = "slideout.png"; BindingContext = viewModel; var layout = new StackLayout { Spacing = 0 }; var label =…

0

引入ASP.NET vNext

[原文发表地址] IntroducingASP.NET vNext [原文发表时间] 2014/5/12 在ASP.NET和Web工具团队中进行着一些非常酷的东西。该小组一直在微软推动开源式的东西已经有好几年了,我们已与来自.NET超越核心团队很棒的创新者联手!其中一些功能已经酝酿了10年以上,它倚靠一个技术向导宿主并跨越了许多团队和学科。 今天,我们宣布一个下一代服务器上的.NET预览版(读作:alpha)。 你可能听说过这样一些在Build大会上宣布的消息: .NET Native–预编译.NET。一切变得更快。 .NET Compiler Platform ("Roslyn") -所有新的C#和VB编译器,新的语言特性,编译器即服务,它是开放源码的。 Nextgen JIT –为最新处理器全新优化的JITter。 ASP.NET vNext会促进事情到一个新的阶段。今天,你使用与桌面应用程序所使用的相同的CLR的运行ASP.NET。我们增加一个云优化(我的云端,你的云端,他们的云端 – 服务器上的东西)版本,来优化服务器方案,如低内存和高吞吐量。 ASP.NET vNext会让你依据应用程序挨着应用程序的方式部署自己版本的.NET框架。一个有新的类库的应用程序不能破坏紧挨着不同版本的应用程序。不同的应用程序甚至可以有自己的云优化CLR版本。CLR和云优化类库即是NuGet包! 在这个截图中你可以在我的包文件夹中看到新框架(请注意,他们是多么渺小)的418版本和420版本。这些NuGet组件包包含完整的“CoreCLR”和云优化的.NET Framework。你可以通过你的应用程序把自己的CLR和.NET Framework部署成一个NuGet。 我可以在Visual Studio中运行ASP.NET vNext的应用程序,当然,是在IIS上,但我也可以很容易地通过命令行或通过自己的应用程序实现对他们的“self-host”。这个alpha包括用于运行和管理ASP.NET vNext的应用程序的命令行工具。 “kvm”命令允许我控制自己的环境。通过运行“kvm list”去查看可用的ASP.NET vNext版本。以每个环境为基准在它们之间进行切换: C:\>kvm list   Active Version Runtime Architecture Location   —— ——- ——- ———— ——–   0.1-alpha-build-0418 svr50 x86 C:\Users\scottha\.kre\packages   *…

0