|
在Silverlight中可以创建行业和其它以数据为中心的应用系统,但在Silverlight中处理数据不是一件容易的事情,由于Silverlight包括许多处理数据和支持Web Service及XML的工具,但这些工具仅代表跨过防火墙进行数据访问的最基础的部分。 常见的数据访问策略是使用Web Service和客户端LINQ共同实现的,如果你正在修改现有Web Service端点强化你的Silverlight应用程序,那么我推荐你使用这个方法。但如果你在使用Silverlight创建一个新的Web Service,就没有必要这么做了。 对一个典型的Web Service层而言,你在服务器上实现一个传统的数据访问策略(自定义业务对象、LINQ to SQL、实体框架、Nhibernate等)通过Web Service暴露数据对象,Web Service仅仅是数据访问策略下面的网关。 但为了开启完整的数据连通性,你必须要映射四个数据操作(创建、读取、更新和删除)到Web Service方法,下面是一个简单的支持Product类的service contract,注意我在本文中使用的都是C#。 例1 Product Web Service的Service Contract [ServiceContract] public interface ICustomerService { [OperationContract] List GetAllProducts(); [OperationContract] Product GetProduct(int productID); [OperationContract] List GetAllProductsWithCategories(); [OperationContract] Product SaveProduct(Product productToSave); [OperationContract] void DeleteProduct(Product productToDelete); } 创建一套服务来处理应用程序完整的数据模型可能是相当费时的,正如这个例子中显示的,特殊特性的操作可能导致Web Service非常臃肿,换句话说,Web Service将有新的要求和操作要增加,甚至包括不属于核心业务域的操作。 在例1中你看到GetAllProductsWithCategories操作默认用于检索Product和分类。即使添加排序、过滤和分页机制到这个简单的例子你也不要感到惊讶,如果有一个简单的方法支持数据操作(如查询、排序、过滤等)不用每次都手动构建这些机制那将是非常吸引人的,ADO.NET Data Service就正是为此而生的。 ADO.NET Data Service ADO.NET Data Service的目标是为数据模型提供Web访问端点,这些端点提供了数据排序、过滤、调整和分页功能,因此开发人员就不需要在自己去编写这部分代码了,实际上,每个端点都是LINQ查询的起点,就从这个端点上你就可以查询你想要查找的数据。 但不要认为ADO.NET Data Service是另一个数据访问策略,实际上,ADO.NET Data Service不执行任何直接的数据访问操作,它位于数据访问的上层,图1显示了ADO.NET Data Service和它在一个应用程序架构中的位置。 ![]() 图 1 ADO.NET Data Service层 由于ADO.NET Data Service依赖于数据访问程序完成真实的数据访问工作,你必须指定这个方法该如何做,在ADO.NET Data Service中,每个服务(Service)必须回到开启LINQ的提供程序的后面,实际上,每个端点就是一个Iqueryable端点,因此ADO.NET Data Service支持任何支持Iqueryable的对象。 创建服务(Service) 当你将ADO.NET Data Service添加到你的项目中时,会创建一个新的.svc文件,代表一个服务的类,和Web Service不同,你不需要自己亲自实现服务的操作,但要允许DataService类处理这些工作,为了运行这些服务,有两个小任务必须执行。首先,DataService类需要一个类型参数叫做上下文对象,它是将数据作为服务暴露的类,当你的服务从关系数据库暴露数据时,这个类是从实体框架(EntityFramework)的ObjectContext或LINQ to SQL的DataContext衍生而来的。 //使用我的NorthwindEntities上下文对象(context object)作为服务(Service)的数据源 public class Products : DataService 上下文对象没有基数类要求,实际上,你可以创建你自己的上下文对象,只要它的属性实现了Iqueryable接口,ADO.NET Data Service将会以端点形式暴露这些属性: public class StateContext { StateList _states = new StateList(); public IQueryable States { get { return _states.AsQueryable(); } } } InitializeService调用中,你可以使用IdataServiceConfiguration对象指定什么类型的许可允许进入服务,ADO.NET Data Service使用名词和动词具体指定许可,如例2所示:
例2 设置访问规则 //这个方法只被调用一次初始化服务端策略 public static void InitializeService(IDataServiceConfiguration config) { //只允许我们读取和更新Products实体,不允许删除和创建 config.SetEntitySetAccessRule("Products", EntitySetRights.AllRead | EntitySetRights.WriteUpdate); //只允许读取Category和Suppliers实体 config.SetEntitySetAccessRule("Categories", EntitySetRights.AllRead); config.SetEntitySetAccessRule("Suppliers", EntitySetRights.AllRead); } 完成这个之后,你可以直接浏览服务了,它将会显示每个端点的原子反馈信息,为了调试ADO.NET Data Service,我建议你禁用Internet Explorer的RSS 反馈视图,或使用另一个浏览器查看服务的XML格式。 (责任编辑:admin) |






骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价