使用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,一经查实,立即删除!

相关文章

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

一、脚本样例 以quectel的EC20模组关闭ppp拨号服务脚本为例,以下为脚本源码: #!/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…

vscode 新建python 终端

ctrlshiftp 输入python, 选择Python:创建终端

STMF4x 固件库V1.25.0

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

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

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

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV 2023/12/22 7:54 简略步骤:rootrootrootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2 rootrootrootroot-X99-Turbo:~/3TB$ tar jxvf Android11.0.tar.…

KEIL5 编译器导致的程序异常

STM32F407写程序过程中发现了一个KEIL5 ARM编译器导致的BUG,记录如下。 源代码比较简单,分别打印两个标志量的值,采用了volatile 声明,避免被优化。 代码功能不用多说,看一下输出结果: 两个标志量都被编译…

STM32F407控制AD7606 采用HAL库的TIM和SPI

前言 本文介绍基于STM32F407的AD7606 8通道同步采集控制方式,总体思路:PWM驱动AD7606完成模数转换,AD7606转换完成后其BUSY引脚给出下降沿,STM32捕获外部中断并在中断服务程序中调用SPI串口读取AD7606数据,工程采用cu…

(转)二分图最大匹配的König定理及其证明

出处:http://www.matrix67.com/blog/archives/116 二分图最大匹配的Knig定理及其证明 如果你看不清楚第二个字母,下面有一个大号字体版本:二分图最大匹配的Knig定理及其证明 本文将是这一系列里最短的一篇,因为我只打算把Knig定理证了&…

如何使用struts2对集合参数进行验证

上一节介绍了struts2可以支持批量表单参数提交&#xff0c;那么提交到后台时如何利用strust2的validation框架对这个集合做验证&#xff1f; struts2提供了一个vistor校验器&#xff0c;可以实现这个需求 还是采用上一节中批量添加书籍的例子 1.jsp文件 <% taglib prefix&qu…

[Axure教程]0001.新手入门基础

Axure RP是一个专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。Axure RP已被一些大公司采用。Axure RP的使用者主要包括商业分析师…

【评论】GNU/Linux下有多少是GNU的?

导读&#xff1a;一个葡萄牙的学生写了一篇文章 《How much GNU is there in GNU/Linux?》由酷壳网的陈皓整理编译为《GNU/Linux下有多少是GNU的》。这篇文章主要分布了今年4月份的Ubuntu Natty的Linux分发包。其主要是用代码行来做的分析&#xff0c;用两个饼图对比分析。内容…

Linux下scp命令的用法

scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名 对拷文件夹 (包括文件夹本身) scp -r /home/wwwroot/www/charts/util root192.168.1.65:/home/wwwroot/limesurvey_back/scp 对拷文件夹下所有文件 (不包括文件夹本身) scp /home/wwwroot/www/charts/util/* root19…

研究者展示黑客通过GPU绕过防毒软件查杀的方法

Slashdot网站近日刊登了一篇研究文章称黑客可以通过特殊手段利用电脑中的GPU来躲避杀毒软件的清查。在这份PDF文档中&#xff0c;研究者展示了黑 客如何 利用GPU来躲避杀毒软件查杀的方法&#xff0c;作者还表示类似的技巧还有可能会发展升级为更加复杂的攻击手段&#xff0c;如…

javascript笔记:javascript的前世,至于今生嘛地球人都知道了哈

&#xff08;引子&#xff1a;javascript其实是个私生子&#xff09;我在上一篇博文最后说道&#xff0c;想写一篇关于javascript基础语法的文章&#xff0c;原因是我在读很多优秀的javascript源码时候常常被javascript诡异的语法搞的精疲力尽&#xff0c;所以时不时的加固java…