开发者社区> 技术小牛人> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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 ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WebSocket连接里客户端和服务器端的Socket ID
WebSocket客户端和WebSocket服务器建立连接后,在WebSocket服务器端会为每一个新连接分配一个socket id,用于唯一标识这个连接。
47 0
WebSocket连接里客户端和服务器端的Socket ID
WebSocket客户端和WebSocket服务器建立连接后,在WebSocket服务器端会为每一个新连接分配一个socket id,用于唯一标识这个连接。
91 0
Silverlight查询大数据出错?使用服务器端分页控件DomainDataSource
原文http://www.cnblogs.com/slmk/archive/2012/08/21/2649369.html   DomainDataSource控件是很强大的,排序/分组/分页等都能轻松搞定。
879 0
SilverLight企业应用框架设计【三】服务端设计
一:缓存服务类型与方法 客户端请求的时候 为了方便的知道请求的类型与类型所包含的方法 我们把服务类型和方法缓存到静态字典中了 代码如下 public class WCFRouteTable { static Dictionary routeService; ...
573 0
PHP获取客户端、PHP获取服务器相关信息
服务器变量 $_SERVER 详解: 1、$_SESSION['PHP_SELF'] -- 获取当前正在执行脚本的文件名 2、$_SERVER['SERVER_PROTOCOL'] -- 请求页面时通信协议的名称和版本。
977 0
Silverlight4控件纯客户端注册验证
本文实现了一个实验性的Silverlight控件纯客户端注册验证机制。希望做过这方面的朋友多给些指导性意见。     先给大家介绍一下Silverlight客户端控件的使用情景。一般来说,Silverlight客户端控件会销售给开发Silverlight程序的公司,他们是控件的购买者。
841 0
silverlight向服务器post数据类
using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.
574 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载