一步一步学Silverlight 2系列17.docx
- 文档编号:30014753
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:11
- 大小:422.35KB
一步一步学Silverlight 2系列17.docx
《一步一步学Silverlight 2系列17.docx》由会员分享,可在线阅读,更多相关《一步一步学Silverlight 2系列17.docx(11页珍藏版)》请在冰豆网上搜索。
一步一步学Silverlight2系列17
一步一步学Silverlight2系列(17):
数据与通信之ADO.NETDataServices
概述
Silverlight2Beta1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言VisualBasic,VisualC#,IronRuby,Ironpython,对JSON、WebService、WCF以及Sockets的支持等一系列新的特性。
《一步一步学Silverlight2系列》文章将从Silverlight2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight2开发。
本文将简单介绍在Silverlight2中如何调用ADO.NETDataServices。
准备知识
由于ADO.NETDataServices是在ASP.NET3.5Extensions中,所以在开始本文示例之前,首先要安装一下ASP.NET3.5Extensions最新版本,你可以从这里下载。
安装完成后,在添加新项对话框中应该能够看到ADO.NETDataService项:
ADO.NETDataService允许应用程序把数据以服务的形式公开,这样我们就可以通过浏览器来直接访问数据,它支持开放的业界标准,如AtomPub和JSON。
它支持标准的HTTP动作如POST、GET、PUT、DELETE,用来完成数据的创建、更新、删除和读取。
ADO.NETDataService的知识这里不再多说,大家可以去查看相关的资料。
简单示例
如果大家看了前面三篇文章的话,可能对于下面的这个界面已经很烦了,不过在本文我会仍然采用这个示例进行演示:
)
建立完Silverlight2项目之后,我们在Web项目中添加一个Post类:
publicclassPost
{
publicintId{get;set;}
publicstringTitle{get;set;}
publicstringAuthor{get;set;}
}
我们用Id作为Post的主键,这里需要添加对于Microsoft.Data.Web.dll程序集的引用,位于<盘符>\ProgramFiles\ReferenceAssemblies\Microsoft\Framework\ASP.NET3.5Extensions下面,引入命名空间usingMicrosoft.Data.Web,并且为Id加上[DataWebKey]特性,最终完成后代码应该如下:
publicclassPost
{
[DataWebKey]
publicintId{get;set;}
publicstringTitle{get;set;}
publicstringAuthor{get;set;}
}
再添加一个Blog类,它有一个返回类型为IQueryable
publicclassBlog
{
publicBlog()
{
_post.Add(newPost{Id=1,Title="一步一步学Silverlight2系列(13):
数据与通信之WebRequest",Author="TerryLee"});
_post.Add(newPost{Id=2,Title="一步一步学Silverlight2系列(12):
数据与通信之WebClient",Author="TerryLee"});
_post.Add(newPost{Id=3,Title="一步一步学Silverlight2系列(11):
数据绑定",Author="TerryLee"});
_post.Add(newPost{Id=4,Title="一步一步学Silverlight2系列(10):
使用用户控件",Author="TerryLee"});
_post.Add(newPost{Id=5,Title="一步一步学Silverlight2系列(9):
使用控件模板",Author="TerryLee"});
_post.Add(newPost{Id=6,Title="一步一步学Silverlight2系列(8):
使用样式封装控件观感",Author="TerryLee"});
}
List
publicIQueryable
{
get{return_post.AsQueryable
}
}
添加一个ADO.NETDataService,取名BlogDataService.svc:
实现服务,让它继承于泛型的WebDataService,并且设置访问权限。
publicclassBlogDataService:
WebDataService
{
publicstaticvoidInitializeService(IWebDataServiceConfigurationconfig)
{
config.SetResourceContainerAccessRule("*",ResourceContainerRights.AllRead);
}
}
现在我们的服务端就完成了,现在我们可以在浏览器中访问BlogDataService.svc,应该可以看到如下界面:
现在还看不到所有的Posts,我们可以在地址栏中输入http:
//localhost:
8081/BlogDataService.svc/Posts,浏览器会默认为Feed打开,可以查看源代码,将会看到所有内容,XML内容如下(只列出片段):
xmlversion="1.0"encoding="utf-8"standalone="yes"?
>
base="http: //localhost: 8081/BlogDataService.svc/"......> //localhost: 8081/BlogDataService.svc/Posts
type="TerryLee.SilverlightWithDataServiceDemoWeb.Post"> //localhost: 8081/BlogDataService.svc/Posts (1)
(1)"title="Post"/> Idadsm: type="Int32">1 Id> Title>一步一步学Silverlight2系列(13): 数据与通信之WebRequest Title> Author>TerryLee Author> 如果要查看某一条文章的内容,可以输入http: //localhost: 8081/BlogDataService.svc/Posts (2)进行查看,如下图所示。 当然还可以进行其他的查询,使用filter和orderby等,如http: //localhost: 8081/BlogDataService.svc/Posts? $filter=Ideq1&$orderby=Id,这里不在介绍。 至此我们的数据服务端就算完成了。 下面再实现客户端,XAML不再贴出来,大家可以参考前面的几篇文章,使用WebClient获取数据,返回的结果是一个XML文件: privatevoidUserControl_Loaded(objectsender,RoutedEventArgse) { Uriuri=newUri("http: //localhost: 8081/BlogDataService.svc/Posts"); WebClientclient=newWebClient(); client.OpenReadCompleted+=newOpenReadCompletedEventHandler(client_OpenReadCompleted); client.OpenReadAsync(uri); } voidclient_OpenReadCompleted(objectsender,OpenReadCompletedEventArgse) { if(e.Error==null) { } } 我们可以使用LINQtoXML进行数据的读取,在Silverlight项目中建立一个Post类,跟上面的Post类一样,然后使用LINQtoXML读取: XmlReaderreader=XmlReader.Create(e.Result); XDocumentpostdoc=XDocument.Load(reader); XNamespacexmlns="http: //www.w3.org/2005/Atom"; XNamespaceads=" varposts=fromxinpostdoc.Descendants(xmlns+"entry") selectnewPost { Id=int.Parse(x.Descendants(ads+"Id").First().Value), Title=x.Descendants(ads+"Title").First().Value, Author=x.Descendants(ads+"Author").First().Value }; Posts.ItemsSource=posts; 完成的代码如下所示: privatevoidUserControl_Loaded(objectsender,RoutedEventArgse) { Uriuri=newUri("http: //localhost: 8081/BlogDataService.svc/Posts"); WebClientclient=newWebClient(); client.OpenReadCompleted+=newOpenReadCompletedEventHandler(client_OpenReadCompleted); client.OpenReadAsync(uri); } voidclient_OpenReadCompleted(objectsender,OpenReadCompletedEventArgse) { if(e.Error==null) { XmlReaderreader=XmlReader.Create(e.Result); XDocumentpostdoc=XDocument.Load(reader); XNamespacexmlns="http: //www.w3.org/2005/Atom"; XNamespaceads=" varposts=fromxinpostdoc.Descendants(xmlns+"entry") selectnewPost { Id=int.Parse(x.Descendants(ads+"Id").First().Value), Title=x.Descendants(ads+"Title").First().Value, Author=x.Descendants(ads+"Author").First().Value }; Posts.ItemsSource=posts; } } 完整的示例就到这里了,运行后的结果与前面的一样。 结束语 本文简单介绍了在Silverlight2调用ADO.NETDataServices,由于对ADO.NETDataServices了解不多,有错误的地方还请大家斧正,你可以从这里下载示例代码。 下一篇: 一步一步学Silverlight2系列(18): 综合实例之RSS阅读器 作者: TerryLee 出处: 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 Tag标签: Silverlight posted@2008-03-1018: 34TerryLee阅读(8044)评论(23) 编辑收藏网摘所属分类: [03] 银光点亮世界
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一步一步学Silverlight 2系列17 一步一步 Silverlight 系列 17