浏览模式: 标准 | 列表

昨天晚上终于把 Silverlight 2 的开发工具下载完了,装好之后打算测试一下 PHPRPC for .NET 客户端是否可以在 Silverlight 2 上运行,因为原来的 PHPRPC for JavaScript 可以很好的在 Silverlight 1 上运行,本以为 PHPRPC for .NET 也应该很顺利的在 Silverlight 2 上运行,可是测试之后才发现完全不是那么回事。通过查看 MSDN,才知道 Silverlight 2 支持的 .NET 框架也是一个精简的框架,而这个精简的框架不但不同于 .NET Framework,而且也不同于 .NET Compact Framework. 这里主要说一下常用的一些不同之处:

Silverlight 2 将 System.Collections 名空间中的大部分容器类都拿掉了,比如 ArrayList、Hashtable 等这些常用的容器现在都不可以再用了。取而代之的是 System.Collections.Generic 名空间中的那些泛型容器类。看来 Silverlight 2 是打算要强制用户使用泛型类了。

Silverlight 2 中的 System.Net.HttpWebRequest 只支持异步操作,而不再支持同步操作了,看来是害怕用户使用同步操作将浏览器卡死,就直接干掉同步操作了。不过 Silverlight 2 是支持多线程的,在单独的线程中做同步调用应该是不会卡死浏览器的。所以感觉 Silverlight 2 将 System.Net.HttpWebRequest 的同步操作干掉是多此一举。

Silverlight 2 中的 System.Net.HttpWebRequest 和 System.Net.HttpWebResponse 支持的属性明显减少了。尤其是 System.Net.HttpWebResponse, 连 Headers 属性都没有了。所以根本就没有办法操作服务器端返回的特殊头信息了。我想这应该是为安全考虑才这样做的吧。另外,也没法操作 Cookie,但愿这两个类能够自动处理 Cookie 吧,如果不支持 Cookie 的话,那可就太糟糕了。

Silverlight 2 支持 System.Reflection.Emit,而 .NET Compact Framework 不支持。这是比较好的一点,因为有了 System.Reflection.Emit 之后,就可以动态创建类型,这对于实现远程调用来说就方便很多了。

当然还有许多其他的一些不同点,但我暂时还没接触到,这里就不说了。

没办法,如果想让 PHPRPC for .NET 支持 Silverlight 2 的话,看来只能改代码了。自己实现
ArrayList、Hashtable 这两个容器,还要增加异步调用的支持,这些改动还真不小呢。

» 阅读全文