Silverlight for Google Picasa
继EatSilverlight之后,我又创建了一个Silverlight的开源项目,有兴趣的朋友一起来弄啊!
SilverlightPicasa是一个Google相册的Silverlight Client。
先说实现技术:
方案1,在Silverlight中使用Google GData的.NET Library,结果……,GDataAPI是使用.NET 1.1实现的,不是针对完整版的.NET,其中利用很多Component Model的东西,集合使用CollectionBase,这些在Silverlight都不支持;这种方案是最好的,可惜要把GDataAPI迁移到.NET 2.0,再迁移到Silverlight 2.0,困难重重啊。对此我还专门提交了一个Issue,结果也是无果,这个Issue可以访问这里以获得详情:http://code.google.com/p/google-gdata/issues/detail?id=119
方案2:使用WebClient + LINQ to XML来Cross Domain访问Google的ATOM接口,可惜啊不知道是微软的Silverlight不完善,还是Google的GData有问题。现在的Silverlight 2对Cross Domain Call是支持了,但是只支持crossdomain.xml文件在HOST上的ROOT位置,并且是自动加载的;而Google又装怪,非要把
System.security.loadPolicyFile("http://photos.googleapis.com/data/crossdomain.xml"); 可以自定义加载。所以,Google负责GData for .NET的开发人员就干脆告诉我Silverlight 2不支持cross domain calls。所以此方案也作罢。crossdomain.xml
放在http://photos.googleapis.com/data/crossdomain.xml;Flex倒是有
为此,我也给微软提交了一个建议:https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=337970&SiteID=212
方案3:回到Silverlight 1.1处理cross domain call的老方法上,在Web Site中创建一个Web Service(也可用WCF Service),在Web Site中引用GDataAPI的相关程
序集;在Web Site中定义一些实体类,在Web Service中的WebMethod中使用GDataAPI来获取数据,并映射为自定义的实体类返回给Silverlight Client。我目前的实现
方式就是这样。
方案4:待到Silverlight有LoadPolicyFile方法后,还是利用WebClient + LINQ to XML来Cross Domain访问Google的ATOM接口。
这是最佳方案(懒得和GDataAPI for .NET纠缠)。
再说说功能:
由于现在使用Web Service实现跨域代理,所以暂时不考虑验证以及需要权限的操作,则目前想到的功能为:
- 输入某个用户名称,列出这个用户的所有public的album,可以用很炫的效果来列出
- 选择每个album,列出其中的photos,可以用很炫的效果来列出
- 可以对album中的photos进行slidshow
有兴趣的朋友,可以访问:http://code.google.com/p/silverlight-picasa/ ,来加入,也希望有兴趣的Designer能加入。