Posts in 2014
2014/11/23 上午1:35:06
Windows Phone Runtime 8.1里面的坑不止一点点,最明显的是很多应用以前可以通过按返回键关闭,但是在8.1之后,如果你用了WinRT的runtime写程序,就会发现返回键的行为仅仅是返回WP的主屏幕,而不是关闭App。长按返回键你会发现你的App是被“最小化”在后台了。WP8.1的新版日历应用也是这样。 虽然这对系统性能没有什么影响,但是让处女座用户看见了就会感觉不爽,所以我们还是把它改掉吧。 WinRT里面这个硬件返回按钮是有专门的事件的:HardwareButtons.BackPressed。我们需要处理的情况仅仅是在应用的主页面上,按手机返回按钮关闭App,所以不需要override全局的HardwareButtons.BackPressed事件。只需要在主页面(通常是MainPage.xaml.cs)里override两个导航事件: protected …
2014/11/22 下午12:31:48
首先。。。虽然我文章写的2,但是国内愿意主动分享WP开发经验的博客太少了,大家都是粉,为了这个平台不容易,所以我有点什么都会拿出来分享,觉得文章菜的请不要喷。。。 开发WP8.1的小伙伴们如果选择了WinRT的runtime,可能会被坑:如果你的手机主题是黑色的,但是你的应用选择了白色主题,就像这样 RequestedTheme="Light" 那你会发现,虽然你在写UI配色方面偷懒了许多,但是WP的系统状态栏(显示信号、时间的地方),也就是Silverlight Runtime里称作SystemTray的,配色并不会因为你选择了“Light”而变成黑色这种对比色,它始终是跟着手机系统设置走的(黑色主题则为白色,白色主题则为黑色),于是你的应用就会出现一条白色的状态栏在手机顶端,用户再也不能愉快的看时间了。草草草草草。 当你想修这个问题的时候,你又会发现微软已经把Silverlight时代
2014/10/19 上午1:31:54
微软说好的一键Target WP8.1的神话终究还是个坑。不少朋友发现有些API虽然编译通过,但依然是爆炸的。比如 await StorageFolder.GetFolderFromPathAsync(); 运行时会就直接爆炸了: 这个坑留在我的几个应用里好久了,今天刚解决。方法是换个API。。。。。 原来是这样子: var path = await StorageFolder.GetFolderFromPathAsync("Assets/StationFloorMaps/"); var imgTemplate = await path.GetFileAsync(_imgPath.Replace("Assets/StationFloorMaps/", string.Empty)); 现在是这样子: var package = Windows.ApplicationModel.
2014/10/13 上午5:18:23
最近在爆个插件,有个需求就是能够在Solution Explorer中右键点击某个文件然后做一些下流的操作,那么首先就要想办法得到用户选择的文件或者文件们。肿么搞呢。研究了一下WebEssential的代码,总结了一下: 首先,你需要获得DTE2对象,貌似指的是你当前的VS实例。为了方便使用定义成一个静态属性,放到package类里面: 也就是继承Package类的那个类,比如public sealed class ForeverAlonePackage : Package private static DTE2 _dte; internal static DTE2 DTE { get { if (_dte == null) _dte = ServiceProvider.GlobalProvider.GetService(
2014/9/23 上午4:38:22
本文目前仅适用于国际版的Azure,国内版没有Application Insight服务,请注意。如果你还没有感受过Application Insight这个人类的最新希望,可以到大微软的Channel 9电视台学习一下:http://channel9.msdn.com/Series/Application-Insights-for-Visual-Studio-Online 另外,本文所说的迁移方法不会保留Application Insight的历史数据,如果你看到这里就想喷:你TM在逗我?这叫什么迁移? 。。。 那还是别往下看了。我的标题叫迁移,是因为我实在找不到别的词了。 如果你换了个Microsoft Azure的订阅,怎么迁移以往的ASP.NET, WP工程上面已经配置好的Application Insight呢?目前Azure Portal没有提供更改订阅的功能。所以我们只能在
2014/9/3 上午1:38:23
有时候我们需要在EF里直接执行参数化的SQL语句,如果有返回,就要把结果映射成C#对象集合。貌似是从EF4.2开始(4.0写法不一样)提供了DbContext.Database.SqlQuery()的API可以直接执行SQL。但是如果碰到可控类型的参数,比如Guid?,就会爆。 看一个例子,定义的SQL语句如下: string sql = @"SELECT p2.Id AS PeriodId, p2.Title AS PeriodTitle, u.UserId AS UserId, u.DisplayName AS
2014/8/25 上午2:02:10
作为一个屌丝,用Azure的时候得处处想着省钱,在你不用虚拟机的时候关机是个省钱的好办法。当然,每天手动登录Portal去开关机比较麻烦。如果你用VM的时间段比较固定,可以做个定时开关机的任务帮你省钱。
做法是用一台机器作为Controller,在上面建立开关机任务,调度Azure上的VM。比如你自己的机器每天早上8点开机,下午5点关机。你希望Azure上的某台VM早上8:30开机,下午4:30关机。那你就可以把自己的机器作为Controller。当然,你也可以在Azure上开一台专门作为Controller的Server,给它分配一个768MB内存的屌丝instance(diaostance)来省钱。
这台Controller机器上必须安装Microsoft Azure PowerShell,并且要在PowerShell里登录一次Azure。本文不再叙述,具体做法请看我之前写的《图解 …
2014/8/23 上午1:29:39
VS2013的Server Explorer在第一次连接Azure的时候默认弹出的登录框只能登录国际版的Azure。但是国内很多屌丝没有国际版怎么办呢?其实国内世纪互联运营的windowsazure.cn也可以通过导入订阅的方式来连接。 1. 登录国内版Azure之后,访问这个地址,下载你的订阅文件:https://manage.windowsazure.cn/publishsettings/index 2. 在VS2013里打开Server Explorer,不管你有没有连接到国际版的Azure,这里操作方法都是一样的。在“Azure”上点右键,选择“Manage Subscriptions...” 3. 在弹出的对话框里,选择“Certificates”选项卡,然后点击“Import”按钮,把刚才下载的订阅文件导入。 4. 导入成功以后应该是这个样子的。 5. 接下来,你就能同 …
2014/7/31 上午1:15:11
Recently I am rewriting an old App using WinRT, I need to display a clock, but I find there is no Timer control.
It looks like I have to implement the Timer myself. I don't use Thread.Sleep because it will block UI thread. I prefer using async await over it. To replace Thread.Sleep, I use Task.Delay:
while (true)
{
// 要做的操作
await Task.Delay(毫秒);
}
为了增加逼格和可重用性,我们需要进一步封装。注意观察本高(
2014/7/29 上午2:51:38
Windows Phone Runtime 8.1 (WinRT) 自带了DatePicker和TimePicker控件。妈妈再也不用担心我装WPToolkit了。但是和WPToolkit里面的两个Picker不同,WinRT的控件在MVVM模式里做data binding的时候是要爆的。 首先是DatePicker。 具体的情况表现为:ViewModel里的属性是DateTime类型,并且VM正确实现了INotifyPropertyChanged接口,前台直接用Binding语法绑定这个属性,但VM变化,界面不变。界面变化,VM不变。代码看起来就像是这样: Xaml: ViewModel: private DateTime _selectedDate; public DateTime SelectedDate { get { return _selectedDate; } …
2014/7/21 上午6:41:10
上个月发布了一个WP8.1应用:NuGet Search,并在GitHub开了源:https://github.com/EdiWang/WP-NuGetSearch
NuGet的服务接口是个WCF OData Service,我尝试使用了跨Framework的PCI工程,结果no zuo no die了。和一般.NET类库不同,PCL有些tricky的地方要爆。下面是开荒成功的代码:
public async Task GetDataAsync(string searchTerm, int pageIndex, bool includePreRelease = false)
{
try
{
IDictionary queryOptions = new Dictionary {
{ "filter",
2014/7/19 上午12:48:07
我的App《上海轨道交通》有个很坑的bug,按拼音首字母分组的站点列表会出现分组错误的情况,比如“莘庄”应该在X下,而WP的SortedLocaleGrouping居然把它分在了S下。这是因为“莘庄”的“莘”是多音字。同理,应该在C下的“长江南路”也到了“Z”下。类似的还有:
分组的代码用的是MSDN的范例改的:http://msdn.microsoft.com/library/windows/apps/jj244365(v=vs.105).aspx 这个范例对于英文来说是没问题的,中文就会出现多音字的问题。
为了解决这个坑爹问题,我写了个PinYinGroupResolver,用的时候可以写出很装逼的代码,比如这样:
GroupedStations = new PinYinGroupResolver(sGroup)
.For(s = …
2014/7/18 上午2:28:05
在ASP.NET里运行定时任务,这是个老生常谈的话题了,撇开那些用per request搞定屌丝办法,目前最好的解决办法只有2种: 1. 如果你有大微软的Azure,可以直接在网站服务中找到Jobs,自己看一下就会了 2. 如果你是屌丝,买不起Azure,就用本文介绍的WebBackgrounder搞 由于ASP.NET是服务器端Web框架,所以一般而言,一个操作的往往是只有收到客户端Request之后才能执行的,如果网站一直没人访问,没有Request进来,如何执行代码呢?定时任务就是这种坑爹场景。 还好,大微软的MVC帝、ASP.NET小王子haacked蜀黍给我们写了个 http://www.nuget.org/packages/WebBackgrounder/ 专门捣鼓这种场景。作为一个屌丝程序猿,和大牛的区别就在于“好编程,不求甚解”。所以我们不必在意它是怎么实现的,只要会用就行 …
2014/6/15 上午1:34:14
昨天教了大家如何使用Windows Azure PowerShell启动和关闭虚拟机,但光会用PS开关机还是不够的。如果你还在用网页版Portal创建和删除虚拟机,而只用PS去开关机,逼格明显就不完整了。所以今天再教大家如何用Windows Azure PowerShell创建和删除虚拟机,完成整个装逼过程。
首先,使用Windows Azure PowerShell登录Azure账户的步骤不再重复了,上一篇文章里有。假定你已经登录了。
如果你想查看虚拟机列表命令是:
Get-AzureVM
1. 要创建虚拟机需要获得一些前置信息。第一个是你的订阅名称。运行这条命令获得:
Get-AzureSubscription
在我的例子中,结果是Windows Azure MSDN - Visual Studio Ultimate。这是一个一年价值12w的订阅,大家不要在意这些细 …
2014/6/14 上午2:30:40
我们在使用Azure的时候,如果只会用网页版portal操作是没有逼格的。如果你不在命令行里啪啪啪的敲点东西,就会被鄙视,他们会说用微软产品的人只会用图形界面,微软的程序员只会拖控件。为了挽回我们的逼格,微软提供了Windows Azure PowerShell,能够让我们以命令行方式操作Azure。今天就教大家如何用Windows Azure PowerShell启动和关闭你的虚拟机。如果你没安装Windows Azure PowerShell,可以通过大微软的Web Platform Installer安装,本文不再啰嗦怎么安装,反正WPI都是一键搞定的。 启动Windows Azure PowerShell后,第一件事就是要登录你的Azure账户。键入以下命令后会弹出登录界面: Add-AzureAccount 登录完成后,
2014/5/7 上午1:57:21
自从有了.NET 4.5,我们又多了一个装逼语法:async,await。但如果错用就会装逼不成反变傻逼。首先我们得明白在ASP.NET中async await所针对的问题,这样才能正确的装逼。于是我们就不得不先研究一下线程池。 在IIS服务器上,处理Http请求的是线程,和Windows的其他软件一样,干活的永远是线程,而不应该说是进程。一个线程同时只能处理一个request,而web上的request不可能同时永远只有一个,所以线程需要和他的小伙伴们一起组成线程池,才能保证网站的响应。当一个线程处理完了手头的请求,它就被释放掉了,于是如果再有新的请求进来他就能再去处理。但如果当线程用完了,并且他们正在处理的请求都没完成,网站就卡住了,用户就只能等出翔。这时候IIS就会返回一个HTTP 503爆给用户。 打个比方,IIS服务器就好像银行,Http请求就好像顾客,银行开的窗口数量就是进程池 …
2014/4/27 上午2:44:18
本文针对.NET初学者介绍LINQ TO XML,你会看见很多为了通俗易懂而故意描述得不专业的语句,所以高手勿入!本文介绍的方法不只针对WP,其他任何.NET项目也可以参考。 我在Windows Phone平台上发布的《上海轨道交通》使用的是离线XML作为数据存储。好处是不需要安装任何三方库,.NET自己就有能力解析。如果用JSON装逼还得下载JSON.NET呢。又因为都是只读数据,也用不着为了装逼而用SQL Lite或SQL CE什么的数据库杀鸡用牛刀。 下面介绍一下如何在工程里内嵌XML文件并解析到对象的一般方法。 《上海轨道交通》的XML文件保存的是所有的站点信息,单个节点看起来就像这样: 由此可见,一个站点包括了多个 …
2014/3/28 上午1:34:16
我是一个疯狂的软粉,也是微软产品十几年的老用户,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 …
2014/3/23 上午2:15:10
我们的应用难免会爆,但是手工在各个方法上加try...catch...未必能cover到所有场景,有时候我们不希望应用吞掉错误,发生严重异常时,我们应当允许应用在用户面前爆掉。如果没有处理这些异常,应用程序的表现就是闪退。比较好的做法是在应用崩溃时给用户一个选择是否发送邮件告诉应用作者崩溃的详细日志。对于作者来说,等待DevCenter的异常报告相对而言比较被动。如果能在应用崩溃之后立即得到回馈那就可以尽早修复问题。 做法很简单,和ASP.NET网站在Global.asax中使用的全局错误处理类似,WP应用也有个全局错误处理的事件。 打开App.xaml.cs,定位到Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)事件处理函数上。 当任何未处理的异常产生时,这个函 …
2014/2/25 上午7:49:07
自从.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,事件 …
2014/2/22 上午12:16:36
Windows Phone 8的LongListSelector控件按拼音分组主要有两种方法,一个是在数据源里手工指定拼音首字母字段,作为index,这种方法效率高但会造成数据冗余不宜维护。另一个就是我今天介绍的方法,来自MSDN,虽然官网例子是针对是英文数据的首字母分组,但其实稍微改一下还是是支持中文的。
首先给大家看看分组的效果,和WP人脉应用按联系人拼音首字母分组的意思是一样的:
实现方法很简单。首先你需要一个来自MSDN的AlphaKeyGroup类,代码如下(我稍作了代码风格上的改动,编译结果和MSDN官网是一样的,不要在意这些细节):
public class AlphaKeyGroup : List
{
///
/// The delegate that is used to get the key information.
/// …
2014/2/10 上午11:59:36
如果你在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编码了: …
2014/2/8 上午2:52:03
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里,试试给 …
2014/2/5 上午2:40:25
去年12月我怀着无比激动的心情参加了微软在中国举办的TechEd2013大会。我参加的是上海场。作为一个微软脑残粉,我当然也是自掏腰包购买的门票。虽然6折的门票也要1600多,但是为了让自己感受微软的气息,我还是咬牙买了这张票。 我最早关注TechEd是2011年在Channel9上看的。虽然对于我这样的屌丝程序员来说,更感兴趣的应该是BUILD大会,然而BUILD似乎每次都只在美国开,而且门票就要2500多美元,所以肯定是无缘了。相比之下,TechEd的内容通常更多样化一些,不仅有开发者的内容,也有IT管理、系统部署等课程,可以让你更轻松的帮妹子修电脑,收更多的好人卡。更重要的是,它是“全世界巡演”的。所以同一年的TechEd会有North America、Australia、Japan等版本。它们的主题和内容却基本一致,因此这次在中国的TechEd2013很大一部分内容对我来说并不是 …
2014/1/30 上午6:40:41
前几天发现我的App有个bug,即某个页面的电话图标在白底黑字的主题下会消失。我的电话图标用的是一个白色的PNG图片,在WP默认的黑底白字主题下,就像是这样: 然而换了白底黑字,图就看不到了: 要解决这个问题我们固然可以准备两张图片然后用编程的方法去加载,但最简单的做法是通过Brush来搞: 原先的代码是这样的: 用了Brush给它刷上WP当前主题的前景色(PhoneForegroundBrush): 于是在白色背景的主题下我们就得到了自动被刷成黑色的图片:
2014/1/28 上午4:22:11
WP的Pivot控件很牛逼,但想要调整样式没有什么比较直观的方法。许多少年只会改HeaderTemplate,但要做到下面这种效果,HeaderTemplate是不够的。 首先,正确的方法是通过模板的样式来做。比如上面这张图的样式,就需要在App.xaml里定义自己的Pivot控件样式。下面的代码加在Application.Resources节点下,这样你的每一个页面就都能用到这个样式了。 别忘了把primitives的namespace定义好: xmlns:primitives="clr-namespace:Microsoft.Phone.Controls.Primitives;assembly=Microsoft.Phone" 代码里面的TitleTemplate对应“diaosbook 阅读器”这一行,也就是Pivot的Title属性。PivotHeadersControl就是 …
2014/1/27 上午12:46:39
上海影城排片查询免费
查询上海几所影城最新上映的电影。
- 显示票价、放映厅、放映时间
- 保存到日历并定时提醒
- 查看影院地址
- 直接呼叫影院电话
- 邮件、短信分享
数据来自上海影城官网,一般只更新未来3天的排片表。
这个App采用了微软哥 @韦恩卑鄙 的 MVVM-Sidekick框架开发。很多基友问我数据怎么来的,由于官方不提供SOAP或REST服务,所以我是解析官网排片表的HTML得到的,大家不要在意这些细节。下个版本我会在Windows Azure上构建专门的服务以保证官网的改动不会要求更新App。
2014/1/24 上午6:52:34
开发WP应用的时候,如果你的应用需要互联网连接,那么检测当前网络是否可用并给出提示是非常必要的。Windows Phone 8 检查网络是否可用的 API如下: System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 这个API会检查手机网络或WIFI是否可用,返回bool类型结果。 转到网络设置用的是ConnectionSettingsTask对象,ConnectionSettingsType属性决定了打开的设置页面是哪种连接类型,如果要打开WLAN设置,代码如下: var connectionSettingsTask = new ConnectionSettingsTask { ConnectionSettingsType = ConnectionSettingsType.WiFi }; …
2014/1/21 上午11:14:39
MVVM(Model-View-ViewModel)是xaml开发者常用的装逼模式,WP应用也不例外,除了我们常用的Prism和MVVM Light,现在还有个后起之秀叫做MVVM-Sidekick。用了它,就可以充分利用.NET4.5的async await来提升逼格了,这个轻量级框架也提供了非常便捷的代码模板,同样完成一个功能需要花费的精力比同类框架要少。具体介绍可以看它的官网:https://github.com/waynebaby/mvvM-Sidekick 但是,在DataContext的处理上,这个框架有些特殊。前几天我就爆掉了。 简单的说,我的需求就是在Windows Phone页面上显示一个进度指示器,把后台的Busy和Message属性绑定到ProgressIndicator上面。这个简单的任务在MVVM Light框架中与其他UI控件的绑定完全一致,可以这么写:
2014/1/19 上午9:03:32
最近正式开始玩WP开发,把一些小技巧和经验写成单独的一篇篇文章,虽然很菜, 通常,我们新建一个Windows Phone应用程序后,菜单栏的代码默认是在MainPage.xaml.cs文件中的。只要取消模板里的这些注释就能在运行时看到菜单栏。 但是这么做有个缺点,就是无法在设计器里直观的看到菜单栏,不便于我们设计和调整UI。其实我们不必使用后台代码来实现菜单栏。它可以直接定义在xaml文件里。打开MainPage.xaml,在LayoutRoot的Grid之外(注意不要定义在Grid里边),加入代码: 这样我们就能在设计器里得到一个菜单栏了。 要做半透明的菜单栏也很方便,只要给shell:ApplicationBar加上Opacity="0.5"属性,0.5就是50%透明。
2014/1/18 下午12:11:45
在开发Windows Phone应用时,一个非常通用的需求就是限定文本框的输入内容。最直接的办法是限定弹出的软键盘的类型。比如有些文本框只允许输入数字,那就弹出数字键盘,不让用户选择其他键盘。这样做的好处有两个:节省后台验证逻辑、方便用户交互。
要限定键盘类型,做法很简单,就是设置TextBox控件的InputScope属性。比如输入电话号码的文本框可以这样写:
这样弹出的文本框就是数字键盘:
所有的InputScope类型见下表:
翻译自MSDN:http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh393998%28v=vs.105%29.aspx
键盘
备注
InputScope
包括自动修正、建议和表情
Text
默认键盘 …
2014/1/11 上午2:31:33
自定义错误页面和异常记录是个很古老的话题了,但依旧可以让人爆到现在。在我做了无数次试验并总结经验和原则后,写下本文,已警后人。 本文的范围和限制 本文仅仅适用于部署在IIS7或以上版本中的ASP.NET 4.0集成模式应用程序。IIS7以上的意思是Windows Server 2008以上服务器适用。我已在WS2012R2,IIS8上测过。 本文的方法均适用于ASP.NET WebForm和MVC应用程序。 本文针对的问题 静态错误页面好还是动态错误页面好?我该如何设计ASP.NET网站错误处理? 我不希望错误页面后面跟上aspxerrorpath=…这个小尾巴。 我的自定义错误页面在VS里调试是好的,为什么部署到服务器上就出不来了? 我的自定义错误页面可以正常显示,但为什么返回的Http状态码不正确? 异常日志该怎样记录,有没有比较好的实践? 一、错误页面的选择 选择静态html页面 …
2014/1/8 上午9:03:27
我从去年9月开始试用国内的Windows Azure,同时也有一个国际版Azure的账号。目前国内的Windows Azure还没有出台计费标准和细则,所以这篇文章里不会提及具体费用,但可以下载每月使用记录来观察和总结计费规律。国内的计费规则和Azure国际版是一样的,但是具体标准还没出来。写这篇文章的目的是总结一下我遇到的问题和经验,以帮助大家如何更经济的去使用Azure的服务。 一、计费周期和订阅 Azure的计费是跟着订阅走的,一个账户可以拥有多个订阅。我使用的主要是网站和虚拟机两个服务。就目前的情况来看,免费试用套餐一不小心就会超额被禁用。一旦订阅被禁用只能等到下个计费周期开始才能继续使用。比如我的订阅是9月9日开通的,那我的计费周期就是每月的9日到下月的8日。如果我在10月份超出了额度限制,那我在Azure上的所有服务都会暂停,并且要等到11月9日才能重新恢复。 被禁用的订阅前面 …
2014/1/1 上午5:01:44
国内的Windows Azure很快就要正式商用了,许多小伙伴们也有计划把现有的网站迁移到Windows Azure上去。但是国内相关的中文文档还是比较缺乏的,所以今天我就写了个超详细教程来教大家如何把ASP.NET网站部署到Windows Azure上。demo用的网站是带有数据库的,并且最后还会演示如何绑定一个.com域名到网站上。 我写的内容基本都是在Channel9上看来的,并且自己亲自实践过许多次的。大家现在阅读的这个博客就是用同样的方法部署到Windows Azure上的。所以不必担心文章坑爹。我的博客不像国内的许多网站那样,发表的内容都没自己测过,非常没有责任心。 下面进入正题。 1. 部署数据库 首先,假设我们的网站已经开发好了。这是一个带有一个SQL Server数据库的ASP.NET网站。第一步我们要做的,是把数据库部署到Windows Azure上去。 你需要的工具: …
主题