使用WCF建立起Silverlight客户端与服务端的桥梁

最近正在开发一个项目,需要应用到Silverlight以及数据库。在正式开工之前需要掌握将数据从服务端送到客户端的技术,我们采用建立WCF服务的方法。

“做中学”是最好的学习方法,真正实践之后学习者将会有更多的自信和把握,这种感觉将激励他更好的走下去,这也就是“Hello World”的意义之一。

本文讲述如何一步一步搭建,完成借助WCF建立起Silverlight客户端和服务端的信息传输通道。

这里的解决方案使用Visual Studio 10,.Net Framework 4.0, Silverlight 4.0

1.建立名为DataHighway的Silverlight Application

clip_image001

下图中,Project DataHighway是客户端,Project DataHighway.Web是服务端。

clip_image002

2、新建两个项目。

创建名为DataHighway.Client的Silverlight Class Library,它是配合用户端的。

创建名为DataHighway.Server的Class Library,它是配合服务端的。

clip_image003

为两个新建项目设置统一的命名空间

clip_image005

clip_image007

 

3、我们设计在客户端和服务端可以传输一个类,里面装着一个人的基本信息。

在DataHighway.Client增加一个类,名为Person,在DataHighway.Client中生成Person.cs文件。

这个类要由客户端和服务端共享,而服务端并不支持System.Windows类库,所以在Person.cs中删除其System.Windows系列的引用。创建Person 类如下

 1 using System;
2 using System.Net;
3
4 namespace DataHighway.Classes
5 {
6 public class Person
7 {
8 public string Name { get; set; }
9 public int Age;
10 public string School { get; set; }
11 public string Major { get; set; }
12 }
13 }

  

4、在DataHighway.Server项目中,添加Person.cs类的链接

右键DataHighway.Server项目,选择Add-> Existing Item,找到DataHighway.Client文件夹中的Person.cs文件,选择Add As Link

clip_image008

5、在服务端添加WCF服务

在DataHighway.Web项目中添加名为PersonService.svc的Silverlight-enabled WCF Service

如下图

clip_image009

6.在项目DataHighway.Web中添加到DataHighway.Server的引用(Add Reference)

如下图所示

clip_image010

7. 创建WCF函数,返回Person类

clip_image011

在PersonService.svc.cs中修改代码

首先添加引用命名空间

using DataHighway.Classes;

  

然后修改PersonService.svc.cs代码如下:

 1 using System;
2 using System.Linq;
3 using System.Runtime.Serialization;
4 using System.ServiceModel;
5 using System.ServiceModel.Activation;
6 using DataHighway.Classes;
7
8 namespace DataHighway.Web
9 {
10 [ServiceContract(Namespace = "")]
11 [SilverlightFaultBehavior]
12 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
13 public class PersonService
14 {
15 [OperationContract]
16 public Person GetPerson()
17 {
18 return new Person()
19 {
20 Name = "Jun Tang",
21 Age = 20,
22 School = "University of Science and Technology of China",
23 Major = "Computer Science"
24 };
25 }
26 }
27 }

  

8.在客户端添加WCF服务引用

将PersonService.svc设置为Start Page,按F5进入Debug模式,记下PersonService.svc的地址

http://localhost:25688/PersonService.svc

右键DataHighway工程,添加服务引用(Add Service Reference),将刚才保存的地址复制进去

clip_image012

单击Advanced,确认Reuse types in all referenced assemblies,如下图

clip_image013

9.设计UI界面

使之能够明了的现实Person的各个属性

10.在客户端使用WCF服务

在客户端中添加引用(Add Reference)

clip_image014

MainPage.xaml.cs中添加引用

using DataHighway.Classes;

using DataHighway.PersonServices;

  

然后在MainPage.xaml.cs修改代码

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using DataHighway.Classes;
13 using DataHighway.PersonServices;
14
15 namespace DataHighway
16 {
17 public partial class MainPage : UserControl
18 {
19 public MainPage()
20 {
21 InitializeComponent();
22 ClientTest();
23 }
24 void ClientTest()
25 {
26 var client = new PersonServiceClient();
27 client.GetPersonCompleted += (sender, ea) =>
28 {
29 textBoxName.Text = ea.Result.Name;
30 textBoxAge.Text = ea.Result.Age.ToString();
31 textBoxSchool.Text = ea.Result.School;
32 textBoxMajor.Text = ea.Result.Major;
33 };
34 client.GetPersonAsync();
35 }
36
37 }
38 }

  

11、将DataHighwayTestPage.html设置为Start Page,运行程序

clip_image015

上图中是在客户端显示,而Jun Tang同学的个人信息却是从服务端通过WCF服务传过来的。

目标圆满达成!

转载于:https://www.cnblogs.com/rosting/archive/2011/09/08/2171867.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] <div onClick={handlerClick}>单击</div>和<div onClick={handlerClick(1)}>单击</div>有什么区别?

[react] <div onClick{handlerClick}>单击</div>和<div onClick{handlerClick(1)}>单击</div>有什么区别&#xff1f; 绑定函数有三种方法 1、constructor绑定constructor(props) {super(props);this.handleClick this.handleClick.bind(this); //构…

我的AutoHotkey配置

关键配置&#xff1a; #IfWinActive ^L:: {WinGetClass, active_class, AIfInString, active_class, Afx:400000:8:Send !{Del}elseSend ^L } return #IfWinActive#IfWinActive F4:: {WinGetClass, sClass, Aif (sClass"Chrome_WidgetWin_1" or sClass"MozillaW…

[react] 怎么防止HTML被转义?

[react] 怎么防止HTML被转义&#xff1f; <h1 dangerouslySetInnerHTML{{__html: cc © 2015}}></h1> 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

如何用脚本可靠关闭一个linux服务或进程

一、脚本样例 以quectel的EC20模组关闭ppp拨号服务脚本为例&#xff0c;以下为脚本源码&#xff1a; #!/bin/sh timeout5 killall -15 pppd sleep 1 killall -0 pppd while [ $? -eq 0 ] dotimeoutexpr $timeout - 1if [ $timeout -eq 0 ]thenexit 1fisleep 1killall -0 ppp…

myeclipse8.5安装反编译工具

1.下载最新的jad.exe应用程序 2.下载net.sf.jadclipse_3.3.0.jar&#xff0c;在myeclipse8.5安装的文件夹中创建一个文件夹如jad&#xff0c;在jad文件夹中建立一个文件夹plugin&#xff0c;将下载的net.sf.jadclipse_3.3.0.jar文件放到新建的plugin文件中 3.在myeclipse8.5安…

C++中include 与 include 的区别

<>时先去系统目录中找头文件&#xff0c;如果没有再到当前目录下找。所以像标准的头文件 stdio.h, stdlib.h等都用<>;""则首先到当前目录下找&#xff0c;如果找不到再到系统目录下找。当include自定义的头文件时&#xff0c;优先使用“”。转载于:https…

hdparm命令详解

hdparm命令详解--------------------http://www.linuxsir.org/bbs/showthread.php?p175167hdparm 功能&#xff1a;获取/设置硬盘参数语法&#xff1a;hdparm [参数] [设备名] ..说明(英文不太好&#xff0c;就不在此献丑啦&#xff0c;麻烦英文好的兄弟翻译一下)&#xff1a;…

[react] 请说下react组件更新的机制是什么

[react] 请说下react组件更新的机制是什么 靠事务批量更新 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

vscode 新建python 终端

ctrlshiftp 输入python&#xff0c; 选择Python:创建终端

linux的strace命令(详解)

linux的strace命令(详解)本文详细讲述linux下的strace命令的用法。 strace 命令是一种强大的工具&#xff0c;它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息&#xff0c;而且不需要以任何特殊的方式来构建…

UVA-11536 Smallest Sub-Array

题目大意&#xff1a;给出一个有n个数的序列&#xff0c;找出最短的涵盖1~k之间所有整数的连续区间。 题目分析&#xff1a;扫描一遍序列&#xff0c;维护head、tail两个位置。要注意&#xff0c;最短的区间上两端的数一定[1,k]上。 代码如下&#xff1a; # include<iostrea…

[react] 你有用过哪些React的UI库?它们的优缺点分别是什么

[react] 你有用过哪些React的UI库&#xff1f;它们的优缺点分别是什么 antd ui 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

display:inline-block的深入理解

在使用CSS实现表现的时候&#xff0c;会经常接触到display:inline-block这一属性&#xff0c;无论是初接触Web标准还是接触标准已久的朋友&#xff0c;大都会对这一属性感觉很迷惑和模糊。 display:inline-block 引用:将对象呈递为内联对象&#xff0c;但是对象的内容作为块对象…

Ubuntu下安装nfs服务

From: http://blog.csdn.net/shawnrong/article/details/1656668 1. sudo apt-get install nfs-kernel-server 会自动安装nfs-common和portmap 2. 配置portmap: 2.1. 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉. 2.2. 配置/etc/hosts.deny&#xff0c;禁止任何…

业务逻辑 : forex mlm

业务逻辑 公司通过mlm的制度和顾客进行签约来收取资金&#xff0c;再把资金给第三方公司进行投资&#xff0c;再把所投资的回报给分配给公司和顾客。 公司的资金来自投资者&#xff0c;公司的营销策略来自mlm的制度&#xff0c;由市场人员来创建mlm。 投资者可以投资不同的配…

STMF4x 固件库V1.25.0

https://www.st.com/en/embedded-software/stm32cubef4.html

[react] 写出React动态改变class切换组件样式

[react] 写出React动态改变class切换组件样式 export default memo(function Demo(){const [clsName,setClsName] useState("active")const handleClick () > {setClsName(clsName "active"?"unactive":"active")}return (<…

初读CLR Via C# 之 IL、CTS、CLS

本章将对CLR中的IL、CTS和CLS进行一个大概的总结。下章将开始第二章的内容。 IL我们称之为高级汇编语言或者中间语言&#xff0c;在我们编写基于.NET框架下的程序&#xff08;不论是C#、VB或者J#等&#xff09;在被编译成本地CPU指令前&#xff0c;都将被编译成IL语言&#xff…