在Silverlight企业级项目开发中,访问数据库是很常见的事情,这里我不详谈Silverlight如何操作数据库,详细可以访问
Silverlight访问数据库三种方法 和
SilverLight数据库访问示例 两篇文章,其中介绍的很详细。在Silverlight操作数据库的方法中,比较常用的是通过WCF服务进行存取数据库。
WCF为了给Silverlight客户端提供引用共享类型,我们必须定义相关DataContract和DataMember契约属性,通过这些属性来制定一个类的数据结构。Silverlight客户端可以通过添加引用和服务器端进行通讯。在实际项目中,这样的定义局限性太多,微软当前已经推出
.Net RIA Services 来解决这个问题,但是,当前.Net RIA仍旧是测试版本,不能被运用于正式项目。针对这个问题,我看了相关Prism框架资料,Prism设计出一个WPF和Silverlight的共享代码方案,参考这个概念,我考虑将Silverlight项目中的数据契约独立提取出一个类,然后将该类共享与Silverlight和WCF之间。这样,我们可以在这个独立契约类中做一些复杂的功能同时供客户端和服务器端共享调用。但是,由于Silverlight客户端和服务器端有着不同的CLR,所以,不得不在创建项目的同时,删除一些相关有冲突的引用。详细步骤请看演示:
1. 首先创建一个项目,“SilverlightChina.CodeSharing”
2. 建立新的契约类项目,该类项目将保存DataContract和DataMember,首先创建一个Silverlight类项目,SilverlightChina.CodeSharing.Client,然后创建.Net类项目SilverlightChina.CodeSharing.Server,对于新创建类,本身都会有Class1.cs文件,在这次演示中不需要该文件,删除即可。
using System; using System.Net;using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes;namespace SilverlightChina.CodeSharing.Entities { public class Student { public string Name { get; set; } public string EmailAddress { get; set; } } }
选择"Add Link".
这样,已经共享契约类已经建立完成,下面来演示如何使用该类.
1. 首先在Web项目中,添加SilverlightChina.CodeSharing.Server引用,然后建立WCF服务,
using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using System.Collections.Generic; using System.Text; using SilverlightChina.CodeSharing.Entities; namespace SilverlightChina.CodeSharing.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class StudentService { [OperationContract] public Student GetStudent() { return new Student() { Name="Jv9",EmailAddress ="[email protected]" }; } } }
4. 在客户端添加引用。
using SilverlightChina.CodeSharing.Entities;
using SilverlightChina.CodeSharing.Services;
using SilverlightChina.CodeSharing.Services;
5. 在客户端调用WCF服务。
using System; using System.Windows; using System.Windows.Controls; using SilverlightChina.CodeSharing.Entities; using SilverlightChina.CodeSharing.Services; namespace SilverlightChina.CodeSharing { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); Clienttest(); } void Clienttest() { var client = new StudentServiceClient(); client.GetStudentCompleted += (sender,ea) => { tbName.Text = ea.Result.Name; tbEmail.Text = ea.Result.EmailAddress; }; client.GetStudentAsync(); } } }
6. 返回结果为:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。