淘宝开放平台TOP并没有提供SL版本的SDK,其实是没有必要,也是不可能的。其原因有二:1、Siverlight默认不允许跨域访问,需要在被访问网站下面放置策略文件,Taobao不可能为我们放置一个策略文件的。2、你的taobao应用程序的appkey,appsecret,甚至是sessionkey都暴露在Silverlight前端了,这也太傻了吧!存在很大的安全隐患!SL直接调用Taobao Api是不可能的,怎么办呢?
其实,我们只要将调用taobao的代码放到我们的服务器端就可以了,服务器获取到数据后再传到前端去。而SL和Web服务器通讯最好的方法莫过于WCF RIA Service了(谁还有更好的方法?)。关于调用Taobao API的流程,参见我以前的文章。下面我们以淘宝开放平台用户Api为例,演示一下如何调用并在silverlight中显示。
1.新建一个Silverlight业务应用程序
2.解决方案中添加一个WCF RIA Services类型的项目。这种类型的项目,其实是两个类库项目,一个供SL引用,一个带.web后缀的供服务器端引用。
3.在2中的web项目中,添加一个DomainService,代码如下:
[EnableClientAccess()] public class TopService : DomainService { const string SERVICEURL = "http://gw.api.taobao.com/router/rest"; const string APPKEY = "your app key"; const string APPSECRET = "your app secret"; public Top.Api.Domain.User GetUser(string nick) { ITopClient client = new DefaultTopClient(SERVICEURL, APPKEY, APPSECRET); UserGetRequest req = new UserGetRequest(); //要查询的字段 req.Fields = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created"; req.Nick = nick; UserGetResponse res = client.Execute(req); //必要时传入Session key return res.User; } }
4.SL中调用TopService的域服务:
private void GetUser_Click(object sender, System.Windows.RoutedEventArgs e) { TopService.Web.TopContext tc = new TopService.Web.TopContext(); tc.GetUser(tbName.Text,(lo) => { this.userInfoGrid.DataContext = lo.Value; },null); }
完成了,就这么简单。用到哪个api就在我们的TopService中添加,SL调用就好了!当然了,权限控制还是要做好的,参见:[Silverlight]Wcf Ria Services权限控制的实现!