使用七牛云存储的一些经验总结
近段时间将使用七牛云存储来存放用户上传的数据,客户端通过七牛的js-sdk与七牛交互,服务端C#实现了七牛相关的接口。在这过程中多多少少遇到点问题,在这里总结一下。原文:使用七牛云存储的一些经验总结599错误处理如果在与七牛的交互中出现http状态码为599的错误,一句话,不要犹豫,直接联系七牛技术支持。七牛的文档也在很多地方提到这个错误,都是指导大家去联系技术支持的。笔者是在分块上传后的mkfile调用时出现的,联系技术支持后,说是调整了一下,让我重试。后来就好了...分块上传无法从回调中获得文件的原始名简单上传采用的是multipart/form-data方式上传,七牛服务端能够从请求中获得文件的原始名,并支持使用魔法变量$(fname)回调业务服务器。不过当使用分片上传的时候情况有所不同。分片上传需要在最后调用mkfile,来将分片拼接起来。但是,mkfile接口支持普通的请求,并没有附带文件名,所以七牛也就无法获得文件名,此时从$(fname)中是取不到文件名的。这个问题我也向七牛技术支持提交了问题,得到的结果是使用自定义
c#线程的重新启动
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;namespacethreadtest{classProgram{staticvoidMain(string[]args){Threadt1=newThread(newThreadStart(Thread1));Console.WriteLine("yes,youdidwell.");Console.WriteLine(t1.ThreadState);t1.Start();Console.WriteLine(t1.ThreadState);if(t1.ThreadState==Threa
Ironpython引用C#数据结构
虽然Ironpython可以使用.net中的对象,但是在真正使用的时候,还是有一些需要注意的地方,这里列出平时整理出来的,供参看1.使用.net中的ListfromSystem.Collections.GenericimportList,Dictionaryint_list=List[int]()同样Byte类型的值的定义fromSystemimportByteb=Byte(1)2.C#lambada>>>fromSystem.Collections.GenericimportIEnumerable,List>>>list=List[int]([1,2,3])>>>importclr>>>clr.AddReference("System.Core")>>>fromSystem.LinqimportEnumerable>>>Enumera
C#学习笔记(与Java、C、C++和Python对比)
最近准备学习一下Unity3D,在C#和JavaScript中选择了C#。所以,作为学习Unity3D的准备工作,首先需要学习一下C#。用了一两天的时间学了一下C#,感觉是处在C++和Java之间的一门语言。比Java更灵活,比C++更简单,确实是一门设计很优秀的语言。基础概念和语法基本数据类型C#中的基本数据类型分为值类型和引用类型。相比Java而言,增加了无符号数,多了C中的struct,字符串也成了基本类型。数值类型、枚举类型、结构体等是值类型。字符串、对象、数组、委托等是引用类型。C#中的基本数据类型都有对应的包装类。编译时编译器会将基本类型转换成对应的类,如int对应Int32,string对应String。和Java中不同,基本类型的关键字只是对应类的别名,所以基本类型的变量也有自己的方法。C#可以对数值类型进行类型转换。转换规则和Java和C/C++类似,注意C#中bool和int之间不能转换。基本类型中有转换成自身的静态方法Parse。此外,C#中还有专门的Convert类可以进行类型转换。C#中的常量关键字是
C#遍历对象里的属性和方法
在测试的时候,偶尔会有需要遍历某个对象,获取这个对象里的所有的方法和属性。OK好吧,这种需求,会在做代理的时候用到的。比如被测对象不固定,或者前期更新会比较频繁。每次的更改,导致测试代码经常变更。这个时候,如果可以获取对象的所有属性和所有方法,然后按照需求注入对应的数据,那么或许就方便了很多。像一些测试工具(像SOAPUI,PushToTest等),你提供了某些方法或者地址,它可以将对应的参数,方法都给反射出来,然后你需要做的事情就是填入对应的值了。通过参看C#的文档(由于工作需要,目前主要工作在.net平台),发现了System.Reflection里有提供的一些方式和方法比如,下面的,获取对象的所有属性staticvoidMain(string[]args){vart=ServiceProxy.GetTcpService<IConfigurationService().GetConfig("ETMongoDBConnectionString");foreach(System.Reflecti
C#学习笔记(补充)——扩展方法、事件
一、扩展方法扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。注意事项:扩展方法需要是静态方法。第一个参数指明作用的类型,并且用this关键字修饰。其他参数跟在第一个参数的后面。需要使用using指令将扩展方法所在的命名空间导入到源代码中。该类型以实例方法的形式调用该方法。编译器生成的中间语言(IL)会将代码转换为对静态方法的调用。扩展方法无法访问它们所扩展的类型中的私有变量。注意到C#中的StringBuilder类没有实现Java中的Reverse()方法,可以通过扩展方法实现:namespaceExtensionMethod{publicstaticclassStringBuilderExtension{publicstaticStringBuilderReverse(thisStringBuilderbuilder){StringBuilderresu
在 Windows Phone 上构建一个 Hello World 程序
Date:2014.8.10此篇教程是给纯粹的初学者(absolutebeginner)看的,如果您已掌握其中技巧就请不要看了。OK,我们需要工具IDE也就是VisualStudio2013,要想进行下面的操作还需要WindowsPhone的开发者证书,关于获取证书我将会另外写一篇博客来说明。这是启动画面。新建一个工程记住要在这里选择WindowsPhoneApps选择第一个就好BlankApp(眼花缭乱的多页面模板不适合初学者,Iamserious)在这里可以修改工程名称App.xaml.cs相当于Android中的java文件,处理逻辑的部分。cs自然是C#的简写。SolutionExploer就是工程文件管理器了MainPage.xaml就是页面“MainPage”的属性描述文件,相当于Android中的xml文件现在双击MainPage.xamlVS将分成3屏,最左边是视图模拟器,中间是代码,右边是文件
C#初学
第一眼看到C#,感觉是有点繁琐,相比较大一学的C语言。这主要是因为C#的语句段比较长,而我是一个打字很慢的人(想练打字很久了,就是懒。。),所以感觉没有C语言简洁明了。但是深入学习以后就发现C#其实更简洁一些,它定义变量和C一样简单,输入输出对于格式也没有C那么严肃,是一个比较适合编写项目工程的语言。在最初学习的时候,因为C#与C有很多联系,所以学起来还是比较轻松的(到现在我感觉是不是大多数的编程语言都有共同的地方)。学到后面就感到还是有一些不同的,比如。。。。。。。。。。。。。。。(此处省略628字)额,好吧,C#给我的感觉真的和C不一样,很大的不一样。这种感觉是用文字表达不了的,好象是C#要比C还要更直接一点,直接面向对象使得它更适合用于实战。在学习过程中,刚开始有一点点不适应,毕竟语法结构和原来学的不一样,但是习惯过后就感觉比较顺利了。后面遇到的问题主要是调试和错误处理,这一章看得比较模糊,目前只学会了靠断点调试和try...catch..finally...(扬哥你要原谅我,单元测试还没有看,你上次教我的确实是没记得多少,Sor
找不到方法:“Int32 System.Environment.get_CurrentManagedThreadId()”。
http://msdn.microsoft.com/zh-cn/library/system.environment.currentmanagedthreadid.aspxhttp://stackoverflow.com/questions/15569664/system-missingmethodexception-int32-system-environment-get-currentmanagedthreadhttp://blog.marcgravell.com/2012/09/iterator-blocks-missing-methods-and-net.html
设置Nullable类型对象的值为default(T)
publicTCreateDefault(){Titem=newT();foreach(varpintypeof(T).GetProperties()){TypecolType=p.PropertyType;if(colType==typeof(Nullable<DateTime>)){p.SetValue(item,DateTime.Now,null);}elseif(colType.IsGenericType&&colType.GetGenericTypeDefinition()==typeof(Nullable<>)){vart=Nullable.GetUnderlyingType(colType);p.SetValue(item
C# Recursion with Func
http://stackoverflow.com/questions/4611549/recursion-with-funchttp://stackoverflow.com/questions/1208703/can-an-anonymous-method-in-c-sharp-call-itself
W3School 教程整理
离线版大部分整理自w3cschool,少部分整理自w3school,由本人整理。感谢w3cschool站长的无私奉献。由于本人精力有限,此处的列表不一定能够及时更新,最新版本请到本人博客查看。AngularJS教程最后更新:2014.10.1在线浏览AngularJS教程PDF版下载地址一下载地址二下载地址三Bootstrap教程最后更新:2014.10.1在线浏览Bootstrap教程PDF版下载地址一下载地址二下载地址三CSS参考手册最后更新:2014.10.26在线浏览CSS参考手册PDF版下载地址一下载地址二下载地址三C#&ASP.net教程最后更新:2014.10.1在线浏览C#教程ASP.net教程PDF版下载地址一下载地址二下载地址三C语言教程最后更新:2014.11.3在线浏览C语言教程PDF版下载地址一下载地址二下载地址三HTML&cs
如何在ViewModel中每隔一段时间运行一次Event
有一种场景,每隔一段时间就要执行一次动作,比如从服务器上拉取内容。碰巧使用的又是C#+WPF的MVVM模式,需要在ViewModel里执行这种操作。该如何进行呢?可以用DispatcherTimer,比如这样://TheConstructurepublicmyViewModel{timer=newDispatcherTimer();timer.Interval=TimeSpan.FromSeconds(5);//Every5secondsdosomethingtimer.Tick+=Tick_Event;timer.Start();}voidTick_Event(objectsender,EventArgse){//Dosomethingyouwant}
在C#中,如何将一种编码的字符串转换成另外一种编码。
当向服务器发送请求,然后获得返回的JSON的时候,字符串的编码可能不是我们想要的。比如返回的如果是GB2132,在C#里可能会是乱码。这时候,我们需要转码,比如把GB2132转成UTF-8。下面函数TransferStr用来完成转码,Test函数进行调用演示。privatevoidTest(){EncodingstrUtf8=Encoding.UTF8;EncodingstrGb2312=Encoding.GetEncoding("GB2312");stringstr="测试";//SupposestrisaGB2312stringstr=TransferStr(str,strGb2312,strUtf8);Console.WriteLine(str);}privatestringTransferStr(stringstr,EncodingoriginalEncode,EncodingtargetEncode){try
写了一个七牛备份下载工具: Qiniu Backup
前几天用七牛CDN了整个网站的资源,过后想把CDN的结果下载备份一份在本地,却发现七牛提供的什么同步工具,都只有上传同步,没有下载同步的功能。然后七牛没有FTP这个大家都知道,网上搜了一下也没看到可以下载整个空间所有文件的工具。好吧,于是决定自己写一个。软件是基于.NET2.0做的,现在基本上Windows都能直接运行了,没有界面,纯粹控制台。原理很简单,就是循环读取文件列表,然后一个个下载。支持私人空间、前缀匹配、不覆盖本地文件等功能。注意使用前先在配置文件里填写相应参数。没啥技术含量的小工具,发出来给有同样需求的朋友,源码已经发布到GitHub,有问题欢迎反馈:https://github.com/abelyao/qiniu-backup
IEnumerable in c#
http://brianreiter.org/2011/01/14/ienumerable-is-lazy-and-thats-cool
OSX 上初步尝试 asp.net 5
去年微软最令开源~~狗~~界振奋的消息就是ASP.NET的开放与开源这一消息了。根据微软的介绍,与我之前的一些总结,可以看到ASP.NET以及.NET平台会有下面几个变化:代码使用Apache协议开源,并且托管于Github上。新的C#编译器Roslyn。一个新的跨平台的CLR(对应Java平台的JVM)。新的项目组织与构建工具KVM。基础库corefx。这些概念都有点让人觉得云深雾绕,仔细研究就会发现,其实ASP.NET借鉴了大量node.js与Ruby社区的概念与架构。对应如下:KVM对应Ruby社区的RVM,与node.js社区的NVM/N。可以管理你的ASP.NET的执行环境(CLR),比如指定使用coreclr还是mono,以及它们的具体版本。使用上也很像。KPM对应Ruby社区的gen,与node.js社区的npm。可以管理你的第三方包依赖。但是实际实现上,还是复用先用的NuGet,包也是NuGet的包。但
字符串的不变性
像是js,以及c#等一系列的语言,推出任何一个特征都要和c比一比,你知道的:)。string的不可变性也是一样,你看:C的string是可以改变的。你可以charstr[]="Foo";str[0]=‘G'str的内容确实被改变了。可以通过print来证明。打印内容,也打印指针。指针不变,内容变了。2.js的不可改.如下的代码,没有任何效果,也可以log出来证明varstr="foo";str[0]='g';因为,语义上来说,这样做意味着原位修改str的内存区内容但是你可以varstr="foo";var='bar'因为原位置的内存没有修改,是新分配的。只是打印不了指针,不好直接证明。要么就看代码,那就啰嗦了。非常非常的啰嗦。不少语言对字符串的实现,都采用了限定不变性。不能说这是不费解的:为何去创建一个新字符串,而不是去修改它呢?毕竟c就是这样做的。字符串的不可变性有不少好处,但是如果程序员忘了这一点也会导致问题。如下的c#代
使用System.IO.File.Create()时注意的问题
在C#中,使用System.IO.File.Create()创建完一个文件之后,如果需要对这个文件进行写操作,会出现错误,提示你“这个文件正在被使用”。原因是System.IO.File.Create()返回的是一个FileStream,这个需要关闭,才能对其创建的文件进行写操作。有两种方法:直接关闭,像这样:System.IO.File.Create("thepathofthefile").Close();使用using自动关闭:using(System.IO.File.Create("thepathofthefile")){//Candosomethingelseornothing}