Silverlight客户端和WCF服务器端共享类库

简介:
在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文件,在这次演示中不需要该文件,删除即可。
 

 
 
3. 统一命名一个命名空间,这样做是为了能够同步共享信息。分别进入两个新建类项目的属性页面,添加默认的命名空间, SilverlightChina.CodeSharing.
 
 


 
4. 建立一个类,创建契约成员,这个类文件可以在客户端创建,也可以在服务器端创建,这里我选择在SilverlightChina.CodeSharing.Client客户端创建。
我创建了一个新的类Student,该类描述学生信息。由于服务器端CLR不支持System.Windows类库,所以,我们需要删除其引用。
 
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中,可以添加任意的方法进行数据绑定。


本文转自 冷秋寒 51CTO博客,原文链接:http://blog.51cto.com/kevinfan/238554 ,如需转载请自行联系原作者

相关文章
|
2月前
|
消息中间件 运维 网络协议
客户端和服务器之间的通信
客户端和服务器之间的通信
32 0
|
2月前
|
监控 关系型数据库 Linux
|
3月前
|
Linux
CentOS7.9服务器一键脚本部署FRP内网穿透服务端与客户端
CentOS7.9服务器一键脚本部署FRP内网穿透服务端与客户端
210 0
|
3月前
|
Kubernetes NoSQL 网络协议
Boost实现简易服务器和客户端示例
Boost实现简易服务器和客户端示例
|
3月前
Socket网络编程练习题三:客户端上传文件到服务器
Socket网络编程练习题三:客户端上传文件到服务器
|
11天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
4月前
|
监控 Linux 定位技术
Linux【环境部署 01】NTP时间服务器搭建及Linux+Windows客户端使用(一篇学会使用NTP服务)
Linux【环境部署 01】NTP时间服务器搭建及Linux+Windows客户端使用(一篇学会使用NTP服务)
651 0
|
4月前
|
网络协议 Java API
基于UDP/TCP实现客户端服务器的网络通信程序
基于UDP/TCP实现客户端服务器的网络通信程序
|
2月前
|
网络协议 Java API
【JavaEE初阶】 TCP服务器与客户端的搭建
【JavaEE初阶】 TCP服务器与客户端的搭建
|
2月前
|
自然语言处理 Java 编译器
【JavaEE初阶】 UDP服务器与客户端的搭建
【JavaEE初阶】 UDP服务器与客户端的搭建