浏览模式: 标准 | 列表

 

前天,微软知名 MVP,MSDN 特邀讲师衣明志先生在MSDN上做了一次关于 Hprose for .NET 的 Webcast,现在该课程的录像和课件已经放出来了,希望了解 Hprose 或者分布式开发的同志们有时间的话,不妨看看这个视频。

该视频的MSDN Webcast在线点播地址为:MSDN Webcast – 在ASP.NET 4中使用Hprose开发分布式应用

本站下载地址:教程 视频

» 阅读全文

公元2000年前,互联网发展非常迅速,HTML得到了越来越多的应用,但专家们对HTML并不满意,因为它只是一个用于描述网页的文档语言,只是一个SGML在具体方面(Web上)的一个应用的实现,HTML不具有良好的扩展性,而SGML虽然无比强大,但又太过复杂,以至于甚至没有人知道它是个什么东西。

 
在这种情况下,专家们开始设计一种比SGML要简单的多,还要比HTML具有更好扩展性的文档标记语言,于是XML诞生了。
 
所以,XML并不是为WebService而诞生的。
 
XML诞生之后,得到了业界的热捧,当时街头巷尾都在传扬XML的伟大和无所不能,随便一个计算机书店里你都能看到半个书架的关于XML的著作。
 
XML确实是很有用的东西,后来的事实也证明了这点,比如SVG、MathML、GML等都是XML的非常棒的具体应用。 但是当一个东西被炒的过热的时候,人们再选择它就不再单单是处于技术原因了,而是希望借助它的热力把自己的产品也捧上去。
 
这一点微软就做的很好,1998年,一个叫UserLand的小公司的一位牛人Dave Winer设计了XML-RPC,因为跟XML沾边,所以立刻就被微软看好了。这个XML-RPC最初其实就叫做SOAP,直到被微软看上并派人去一起合作。很快他们完成了最早的实现,并被改名为XML-RPC。
 
好了现在实现上没有问题了,但要推广,还是标准化一下比较好,于是微软把IBM, Oracle, Sun, Apple, Netscape等找来说我们一起把它标准化吧,这样我们大家就一起可以用它赚钱了,于是SOAP就这样形成了。
 
但大家知道,这些大厂商们制定标准那是各怀鬼胎啊,微软怎么可能把便宜就这么好心的让给其他人分享呢?所以SOAP标准里面除了一丁点的通用部分外,还包括允许私有扩展的内容。而且微软在这个制定过程中,已经开始做这部分内容了,所以SOAP刚刚出来,微软就抢先其他人推出了成熟的WebService产品。这就是后来大家在.NET 1.0中看到的WebService。
 
当时你会看到微软在宣传WebService时,最喜欢举的例子就是WebService可以传输.NET的数据集(DataSet),这是一个看似非常强大的功能,但它也是微软对用户的最大误导,微软一边告诉你SOAP是跨平台、跨语言的国际标准,一边大讲特讲用WebService可以方便的传输.NET数据集,但是有一点微软就是不提,那就是这个数据集虽然使用WebService可以传输,但它并不是跨平台跨语言的,你只能在微软的.NET平台上来使用。能跨平台、跨语言的部分仅仅是一些简单类型以及这些类型的一些集合类型。
 
但微软为什么要这样宣传WebService呢?目的很明显,它就是让你以为用了WebService之后不用再担心跨语言跨平台的问题,但一旦你用它来传输了数据集,事情就不再是这样了,你已经被.NET平台给绑架了,从此你的WebService只能被.NET这一个平台独享,所以这是微软的一个阴谋。直到你真正开始做跨语言应用的时候才会发现的阴谋。
 
因为微软是最早实现WebService的,其它厂商比起它来慢了不止一点点。所以当WebService被普及开之后,IBM等厂商并没有占到什么便宜,所以,微软以外的厂商不干了,于是SOAP开始了它的重新修订。所以SOAP的修订并不仅仅是处于技术上的目的,更多的是各大厂商对利益的博弈。因此SOAP的每个修订版本跟前一个版本在兼容性上都很不好,甚至新版本会推荐你把旧版本中的特性完全放弃,原因就是旧版本对微软太有利了。
 
经过几番博弈之后,各大厂商的利益总算是得到了平衡,SOAP也就变成了今天的这般模样,那就是IBM推荐的,你们不要再传对象了,你们直接传XML吧。所以现在在IBM支持下的那些开源实现都是大力支持直接传XML的WebService的。
 
但它真正解决用户的问题了吗?没有,它非但没有解决用户的问题,而且还饶了一个大圈子最后把如何解决问题推给了用户。 但是对于IBM这些大厂商来说他们的目的已经达到了,经过这么长时间的洗脑,用户被一个不知道为什么这样做却不得不这样照着做的SOAP标准给绑架了,因为它被称为标准,虽然它实际上并不能解决你的问题,但因为你自己确实可以通过一些自己的方法来解决它所带来的问题,以至于让你相信这些问题是它帮你解决的,因为它的权威摆在那里,所以你几乎从来不怀疑它只是给你带来了问题让你解决,而不是帮你解决已有的问题。
 
但对于制定这个标准的大厂商们来说,他们的钱已经赚到了,所以不管SOAP和WebService本身究竟多差劲,他们是不会在意的,对他们来说赚钱的东西就是好东西,更何况将你绑架在了他们自己的平台和语言上赚钱,还能让你相信是跨平台的跨语言的呢。
 
直到现在微软在推的WebService仍然跟IBM资助的那些开源的Java实现的WebService不能真正的做到互通,不信你就传个数据集试试,你甚至连泛型容器都不能互传,哦~确切的说,你连非泛型的容器(比如.NET中的ArrayList)都不能互传,为什么?因为在.NET中序列化ArrayList到SOAP时,它是被序列化为名称空间是http://schemas.microsoft.com/clr/ns/System.Collections的绑定于.NET平台的特殊类型的数据啦。这种情况下,你怎么可能像SOAP描述的那样跨语言传输真正的对象?
 
所以,基本上现在用SOAP的人都在用它传输字符串。
 
好了,现在大家应该明白了,SOAP其实是一个被微软和IBM这样的大厂商绑架了的标准,在这些大厂商自己的实现中包含了太多的私有东西,这样就造成了技术壁垒,你不可能真正的实现它所描述的跨语言跨平台特性,另外SOAP和WebService标准本身就非常复杂,WebService有一大串的标准,就连微软自己都无力完全实现这些,更何况那些没有大厂商支持的语言呢,其它的语言有些标称自己支持WebService了,实际上呢,支持的仅仅是最基本的部分而已,而大部分标准中的内容根本就没有实现,甚至有些语言提供的仅仅是XML解析工具,就标称已经支持WebService了,但最后所有的活还是要你自己来干。

» 阅读全文

4月
22

我的围脖

在 .NET Framework 3.5 beta 时,微软曾引入了一个新的包 System.Numerics,其中包含了大整数类,不过可惜在后来的接近发布时,这个包又移除了。现在 .NET Framework 4.0 又重新将它请了回来。而且这次的正式版本中不会再次移除了。这对 .NET 开发者算是一个好事,但如果只有使用 .NET Framework 4.0 的用户才能享受到这个包,还是不太完美,毕竟现在大多数 .NET 开发还停留在 2.0 或 3.5 的阶段。

我们最近新推出的 PHPRPC 的商业版 Hprose 最显著的一个特点就是多语言互通,让各个版本的 .NET 程序之间无障碍互通更是小菜一碟。但如果只有 .NET 4.0 中有 BigInteger,就无法将其传给 .NET 的早期版本,怎么谈得上无障碍互通呢?为了解决这个问题,我们将 System.Numerics 移植到了 .NET 4.0 之前的所有版本上,现在不但 .NET Framework 1.0、1.1、2.0、3.5 可以使用 System.Numerics 的所有类了,连 .NET Compact Framework 1.0、2.0、3.5,SilverLight 2.0、3.0、4.0,Mono 1.0、Mono 2.0 也都可以使用了。

虽然我们的商业版Hprose本身不是免费的,但是这个移植的 System.Numerics.dll 我们是免费开放的。你不需要支付任何费用,就可以将它用于您的任何程序当中。是不是很爽?哈哈,那还等什么,还不赶快下载试试。

下载地址:System.Numerics.dll

» 阅读全文

3月
22

MacBook 彻底禁用休眠

 今天我儿子回来了,回来第一件事就是把我的MacBook给合上了,之前因为把MacBook的内核强制开了64位,所以机器休眠之后无法唤醒了,害我一上午的工作白做了。于是我开始从网上搜集彻底禁止MacBook休眠的方法。开始是使用:

sudo pmset -a hibernatemode 0

之后发现仍然合上笔记本之后无法唤醒。然后又从网上找了一个 Insomnia 的软件,装了之后,仍然不能阻止合上笔记本休眠,而且休眠之后仍然无法唤醒。在我绝望之际,看了一下 Insomnia 的控制台日志,发现它的驱动加载失败了,我怀疑这可能跟我强制开启MacBook的64位内核有关,于是把内核换回32位,重启。之后合上笔记本休眠之后可以正常唤醒了,使用 Insomnia 之后也可以阻止合上笔记本就休眠了。

原来一切问题的根源都来自64位内核,用了一段时间的64位内核,说实话没感觉到有什么特别的地方,除了休眠不正常以外。现在发现在32位内核下,那些64位的程序照样可以运行,没什么区别。看了我的MacBook 403确实不适合使用64位内核,不过我同事的MacBook使用64位内核就没有这个问题,当然他的MacBook也比我高一个档次。所以,跟我一个型号的64位内核就不要试了,如果是更高级版本的MacBook,你可以试试,如果也遇到我这个问题的话,应该用同样的方法可以解决。

» 阅读全文