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

相关文章
|
1月前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
56 18
[Git] 深入理解 Git 的客户端与服务器角色
|
2月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
321 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
6月前
|
存储 运维 Oracle
服务器数据恢复—光纤共享存储互斥出现问题的数据恢复案例
两台SOLARIS系统(SPARC平台)的服务器通过光纤交换机共享同一个存储作为CLUSTER使用。正常情况下只有A服务器工作。如果A服务器发生故障宕机,可将A服务器关机,开启B服务器接管。但由于配置不当导致共享存储互斥出现问题。 管理员进行运维检查时发现B服务器连接了一块未知磁盘。由于B服务器并未启用,处于闲置状态,所以管理员也将这块磁盘当作闲置的,于是在B服务器上将磁盘的某个分区做了newfs。没想到这块磁盘就是那个共享存储,执行操作没有多长时间A服务器就开始报警并宕机。
|
3月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
68 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
4月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
225 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
4月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
254 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
4月前
使用Netty实现文件传输的HTTP服务器和客户端
本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
124 1
使用Netty实现文件传输的HTTP服务器和客户端
|
4月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
128 4
|
4月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
88 3
|
4月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
93 2