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文件,在这次演示中不需要该文件,删除即可。
3. 统一命名一个命名空间,这样做是为了能够同步共享信息。分别进入两个新建类项目的属性页面,添加默认的命名空间, SilverlightChina.CodeSharing.
4. 建立一个类,创建契约成员,这个类文件可以在客户端创建,也可以在服务器端创建,这里我选择在SilverlightChina.CodeSharing.Client客户端创建。
我创建了一个新的类Student,该类描述学生信息。由于服务器端CLR不支持System.Windows类库,所以,我们需要删除其引用。
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; }
}
}
5. 添加一个“链接类”到SilverlightChina.CodeSharing.Server, 通过链接类进行共享契约成员。
选择"Add Link".
这样,已经共享契约类已经建立完成,下面来演示如何使用该类.
1. 首先在Web项目中,添加SilverlightChina.CodeSharing.Server引用, 然后建立WCF服务,
2. 创建一个WCF函数返回类,这里和普通的WCF访问数据库返回数据是一样的方法, 这里我们调用了SilverlightChina.CodeSharing.Server的契约成员属性。
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 ="QQ34506@hotmail.com"
};
}
}
}
3. 在Silverlight客户端使用契约成员,Student。首先要添加一个服务引用,添加的时候,点击“Advanced”检查是否选中,重复使用所有类库。
4. 在客户端添加引用。
using SilverlightChina.CodeSharing.Entities;
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. 返回结果为:
这样已经实现了共享契约成员的功能,在上面ClientTest中,可以添加任意的方法进行数据绑定。
分享到:
相关推荐
通过RIA服务,开发者可以在服务器端定义业务逻辑和数据访问层,然后在Silverlight客户端轻松调用这些服务,而无需关心底层的通信细节。 标题"Silverlight WCF RIA服务(六)创建RIA Services 类库 源代码"暗示我们...
- **代码共享**:Silverlight项目可以利用.NET Framework的部分类库,实现服务器端和客户端代码的复用。 - **OData支持**:通过WCF RIA Services,Silverlight应用能轻松访问和操作OData服务,实现数据的CRUD操作...
此服务简化了服务器端和客户端之间的数据交互,使数据操作更为便捷。 9. **深度集成** Silverlight 4 可以与.NET Framework紧密结合,共享代码库和类库,降低了开发和维护成本。同时,它还支持与COM对象交互,便于...
- 支持服务器端分页。 - 改进了数据友好性。 - 支持BLOB流操作。 - **Client Enhancements**: - 支持行计数功能。 - 支持WPF和Silverlight中的数据绑定。 ##### 3.7 Parallel Computing with .NET 4 - **...