public class Post{ public int ID { get; set; } public string Title { get; set; } public string Author { get; set; }}我们用ID作为Post的主键,这里需要添加对于Microsoft.Data.Web.dll程序集的引用,位于<盘符>\Program files\Reference AssemblIEs\Microsoft\Framework\ASP.NET 3.5 Extensions下面,引入命名空间using Microsoft.Data.Web,并且为ID加上[DataWebKey]特性,最终完成后代码应该如下:
public class Post{ [DataWebKey] public int ID { get; set; } public string Title { get; set; } public string Author { get; set; }}再添加一个Blog类,它有一个返回类型为Iqueryable<Post>的属性posts:
public class Blog{ public Blog() { _post.Add(new Post { ID = 1,Title = "一步一步学Silverlight 2系列(13):数据与通信之WebRequest",Author = "TerryLee" }); _post.Add(new Post { ID = 2,Title = "一步一步学Silverlight 2系列(12):数据与通信之WebClIEnt",Author = "TerryLee" }); _post.Add(new Post { ID = 3,Title = "一步一步学Silverlight 2系列(11):数据绑定",Author = "TerryLee" }); _post.Add(new Post { ID = 4,Title = "一步一步学Silverlight 2系列(10):使用用户控件",Author = "TerryLee" }); _post.Add(new Post { ID = 5,Title = "一步一步学Silverlight 2系列(9):使用控件模板",Author = "TerryLee" }); _post.Add(new Post { ID = 6,Title = "一步一步学Silverlight 2系列(8):使用样式封装控件观感",Author = "TerryLee" }); } List<Post> _post = new List<Post>(); public Iqueryable<Post> posts { get { return _post.Asqueryable<Post>(); } }}添加一个ADO.NET Data Service,取名BlogDataService.svc: 实现服务,让它继承于泛型的WebDataService,并且设置访问权限。
public class BlogDataService : WebDataService<Blog>{ public static voID InitializeService(IWebDataServiceConfiguration config) { config.SetResourceContainerAccessRule("*",ResourceContainerRights.AllRead); }}现在我们的服务端就完成了,现在我们可以在浏览器中访问BlogDataService.svc,应该可以看到如下界面: 现在还看不到所有的posts,我们可以在地址栏中输入 [url]http://localhost:8081/BlogDataService.svc/Posts[/url],浏览器会默认为Feed打开,可以查看源代码,将会看到所有内容,XML内容如下(只列出片段):
<?xml version="1.0" enCoding="utf-8" standalone="yes"?><Feed xml:base="[url]http://localhost:8081/BlogDataService.svc/[/url]" ......> <ID>[url]http://localhost:8081/BlogDataService.svc/posts[/url]</ID> <updated /> <Title>posts</Title> <link rel="self" href="posts" Title="posts" /> <entry adsm:type="TerryLee.SilverlightWithDataServiceDemoWeb.Post"> <ID>[url]http://localhost:8081/BlogDataService.svc/posts[/url](1)</ID> <updated /> <Title /> <author> <name /> </author> <link rel="edit" href="posts(1)" Title="Post" /> <content type="application/xml"> <ads:ID adsm:type="Int32">1</ads:ID> <ads:Title>一步一步学Silverlight 2系列(13):数据与通信之WebRequest</ads:Title> <ads:Author>TerryLee</ads:Author> </content> </entry>如果要查看某一条文章的内容,可以输入 @L_419_11@进行查看,如下图所示。
@H_23_404@
当然还可以进行其他的查询,使用filter和orderby等,如 [url]http://localhost:8081/BlogDataService.svc/Posts?$filter=Id[/url] eq 1&$orderby=Id,这里不在介绍。至此我们的数据服务端就算完成了。下面再实现客户端,XAML不再贴出来,大家可以参考前面的几篇文章,使用WebClIEnt获取数据,返回的结果是一个XML文件:private voID UserControl_Loaded(object sender,RoutedEventArgs e){ Uri uri = new Uri("http://localhost:8081/BlogDataService.svc/posts"); WebClIEnt clIEnt = new WebClIEnt(); clIEnt.OpenReadCompleted += new OpenReadCompletedEventHandler(clIEnt_OpenReadCompleted); clIEnt.OpenReadAsync(uri);}voID clIEnt_OpenReadCompleted(object sender,OpenReadCompletedEventArgs e){ if (e.Error == null) { }}我们可以使用liNQ to XML进行数据的读取,在Silverlight项目中建立一个Post类,跟上面的Post类一样,然后使用liNQ to XML读取:
XmlReader reader = XmlReader.Create(e.Result);Xdocument postdoc = Xdocument.Load(reader);Xnamespace xmlns = "http://www.w3.org/2005/Atom";Xnamespace ads = "http://schemas.microsoft.com/ado/2007/08/dataweb";var posts = from x in postdoc.Descendants(xmlns + "entry") select new Post { 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;完成的代码如下所示:
private voID UserControl_Loaded(object sender,OpenReadCompletedEventArgs e){ if (e.Error == null) { XmlReader reader = XmlReader.Create(e.Result); Xdocument postdoc = Xdocument.Load(reader); Xnamespace xmlns = "http://www.w3.org/2005/Atom"; Xnamespace ads = "http://schemas.microsoft.com/ado/2007/08/dataweb"; var posts = from x in postdoc.Descendants(xmlns + "entry") select new Post { ID = int.Parse(x.Descendants(ads + "ID").First().Value),Author = x.Descendants(ads + "Author").First().Value }; posts.ItemsSource = posts; }}完整的示例就到这里了,运行后的结果与前面的一样。 结束语 本文简单介绍了在Silverlight 2调用ADO.NET Data Services,由于对ADO.NET Data Services了解不多,有错误的地方还请大家斧正,你可以从 这里下载示例代码。 总结
以上是内存溢出为你收集整理的一步一步学Silverlight 2系列(17):数据与通信之ADO.NET Data Services全部内容,希望文章能够帮你解决一步一步学Silverlight 2系列(17):数据与通信之ADO.NET Data Services所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)