童话进行中的Silverlight

本一开始对于Silverlight的数据交互也很是好奇,但是似乎总认为没有特别之处,但是但去对其进行了解后,发现基于Silverlight的异步数据交互存在自己的特色,就自己的理解来看,因为限于Siverlight SDK对于.NET Framework 类库的有限支持,于是在数据交互上存在自己的特殊性。Silverlight3 也如期发布,新技术的带给我们新的体验,真的无时不在震撼。面对Microsoft童话般的美丽而动听的宣传之余,是我们不断的探索和追求!

  SIlverlight 在和ADO.NET 在服务器端进行数据时,我认为主要是分两大类进行比较,即传统的面向对象和最新面向服务的概念的提出。对于这两种的运用在一定程度上,也是有互补性。对于,技术的更新换代和程序员自我和技术客观的跟进时有重要意义的。

  首先在面向对象,来看,主要是在数据源端采取ASHX,在Silverlight SDK中运用WebClient或WebRequest/WebReponse进行完整的面向对象的ADO.NET数据处理逻辑和异步数据交互。


在ASHX文件中进行完整的数据处理,同数据库进行交互,这种处理有点类似于AJAX 时代的做法。在CLR 完成了自己的任务后,那么对于处理结果如何反映到Silverilght程序来呢,于是,很明显的运用 异步数据交互。对于 ASHX那么Silverlight SDK的一般选择无外乎WebClient和WebRequest/WebResponse两种

Photo

WebClient

Photo

正如Silverlight SDK Doc中介绍的那样, webclient从1.1中downer 发展而来,灵活性是相当大的,个人认为不失为懒人的看家法宝。数据交互过程一目了然,但是,如果配合CLR中ASHX进行运用,其实威力大打折扣,因为缺少完整的面向对象的支持。数据交互类型停留在了String类型上。当然,基于这个不足,如果string具体内容是完整的 xml, 那么结果就不一样了,但是无论是操作XML在对象间进行全套转换,我想也不是那么轻松的。

WebRequest/WebResponse

Photo

在运用WebRequest/WebResponse进行数据交互的过程中存在跨线程访问问题。根据我目前看到的来进行解释就是Silveright中UI线程和数据访问的结果不在同一个主线程中,于是当将异步线程的结果绑定到UI上时,UI是另个线程,这个时候就发生了跨线程异常。解决方法如上所示,Doc中也对其进行了详细的描述。

在我看来,以上的处理方式似乎都是停留在面向对象时代的带有面向过程的想法编程模式,自己的想法吧。非常典型的面向服务在silverlight中进行数据交互则是WebService在2.0时代就已经提出的面向服务编程的概念。WCF这个典型的不能再典型的数据服务,在我看到的运用中似乎并不多,但肯定是不错的选择,适合跨平台数据读取。ADO.NET Service这是我本人比较喜欢的一种数据交互概念。因为他的操作是十分清晰的,但是对于复杂的数据筛选,需要配合相应的Linq和eq语言来完成。但是,毋庸置疑,在.net Framework 3.5 sp1中才提出的概念,肯定有他的优势所在。

ADO.NET 数据服务+ADO.NET Entity Data Model完成数据交互

Photo

首先建立操作库的data entity model,这很类似于 linq to sql技术在数据库上的操作,在建立这个模型的过程中,有些太小儿科的东西就不再强调,当然是本人犯了这种错误,呵,比如表缺乏主键,建立数据模型是可以的,但在后续的操作中是会出种种让你头痛三分的问题。

数据模型建立后,需要进行必要的数据承载,也就是说,我需要一个平台或者接口将这些数据展现出来,并能让需要操作的人能操作到这些数据。

 ADO.NET Data Service 进行数据交互

Photo
建立了一个最简单的数据交互类型。在 Silverlight中访问如下(DataServiceContext,DataServiceQuery<T>)
Photo

建立DataServiceContext进行数据访问,建立正确的Uri进行异步数据调用

 photo


建立DataServiceQuery<T>进行数据交互。

在这两种方法中进行DataService数据访问中其实是差不多的,这个类其实是有千丝万缕的联系。笔者在这里有个问题始终是在困扰。

  DataServiceContext在进行数据读取后可以直接进行数据绑定,但是DataSericeQuery<T>进行数据读取后必须要进行集合的复制,进行跨线程访问处理,对于结果必须要ObServableCollection集合或相应的List<T>后才能进行绑定,笔者在群中进行了咨询,一位高人指点后,仍然半懂不懂,领悟能力太差吧。

   老戏新唱-----WebService,这是最古老,但若一定要用面向服务编程,这确实最行之有效的方法。

photo
首先建立webService就不在多言。这里进行完整的 ADO.NET数据交互。

photo
运用WebService添加到Siverlight服务中代理类进行数据交互。

在这里笔者也非常认真写下来,可以通过建立Uri来访问WebService,asmx文件进行数据操作,因为asmx文件实际返回的是xml文件,对结果进行xml处理同样能得到想要的结果。

最后如上篇Silverlight期许的那样愿所有的程序员终是技术盛界的英雄豪杰。

-------------------------------简单如也,就此搁笔,贻笑大方



原文地址:https://www.cnblogs.com/aspnetdream/p/1568097.html