看大家好像对我的NParsing框架不是很感兴趣(写NParsing帖没人顶我),那就给大家来点“甜品”,换换口谓。来说说Silverlight方面的东西。

在Silverlight中数据通信只能用异步。有人会觉得写起来很麻烦,其实不然。也有很简单的写法,一句话就能搞定。哈哈,下面看代码

吧。这是一个用户登录的功能。

首先是WCF异步调用接口定义:

代码

1 usingSystem;
2 usingSystem.ServiceModel;
3 usingTest.Model;

5 namespaceTest.Silverlight.Client
6 {
7 [ServiceContract]
8 publicinterfaceIUserService
9 {
10 ///<summary>
11 ///用户登录
12 ///</summary>
13 ///<param name="username">用户名</param>
14 ///<param name="password">密码</param>
15 ///<param name="asyncCallback"></param>
16 ///<param name="asyncState"></param>
17 ///<returns>
18 ///0 登录失败
19 ///1 登录成功
20 ///2 用户不存
21         /// 3 密码错误
22 ///4 用户未审核
23 ///</returns>
24 [OperationContract(AsyncPattern =true)]
25 IAsyncResult BeginLogin(stringusername, stringpassword, AsyncCallback asyncCallback, objectasyncState);
26 intEndLogin(outUser userInfo, IAsyncResult result);
27 }
28 }

然后是WCF客户端通信代理类:

代码

1 usingSystem;
2 usingSystem.ServiceModel;
3 usingSystem.ServiceModel.Channels;
4 usingTest.Model;

6 namespaceTest.Silverlight.Client
7 {
8 publicclassUserClient : ClientBase<IUserService>, IUserService
9 {
10 privatestaticreadonlyBinding binding =newBasicHttpBinding();
11 publicUserClient(EndpointAddress remoteAddress) : base(binding, remoteAddress)
12 {
13 }
14 
15 publicIAsyncResult BeginLogin(stringusername, stringpassword, AsyncCallback asyncCallback, object
16 
17 asyncState)
18 {
19 returnChannel.BeginLogin(username, password, asyncCallback, asyncState);
20 }
21 
22 publicintEndLogin(outUser userInfo, IAsyncResult result)
23 {
24 returnChannel.EndLogin(outuserInfo, result);
25 }
26 }
27 }

最后就是Silverlight中怎么调用啦:

代码

1 usingSystem;
2 usingSystem.IO;
3 usingSystem.Threading;
4 usingSystem.Windows;
5 usingSystem.Windows.Controls;
6 usingSystem.Windows.Input;
7 usingSystem.Windows.Media;
8 usingSystem.Windows.Media.Imaging;
9 usingTest.Model;
10 usingTest.Silverlight.Client;
11 
12 namespaceTest.SilverlightApplication
13 {
14 publicpartialclassUserLogin : UserControl
15 {
16 privatereadonlyUserClient _UserClient =newUserClient(SystemData.UserService_EndpointAddress);
17 privatereadonlySynchronizationContext syn;
18 
19 publicUserLogin()
20 {
21 syn =SynchronizationContext.Current;
22 InitializeComponent();
23 }
24 
25 privatevoidbtnLogin_Click(objectsender, RoutedEventArgs e)
26 {
27 _UserClient.BeginLogin(txtUsername.Text.Trim(), txtPassword.Password.Trim(),
28 ar =>
29 {
30 User userInfo;
31 intiRet =((IUserService) ar.AsyncState).EndLogin(outuserInfo, ar);
32 syn.Post(obj =>
33 {
34 switch((int) obj)
35 {
36 case0:
37 MessageBox.Show("用户登录失败。", "提示信息", MessageBoxButton.OK);
38 break;
39 case1:
40 MessageBox.Show("用户登录成功。", "提示信息", MessageBoxButton.OK);
41 break;
42 case2:
43 case3:
44 MessageBox.Show("用户不存在或密码错误。", "提示信息", MessageBoxButton.OK);
45 break;
46 case4:
47 MessageBox.Show("用户未审核,请耐心等待。", "提示信息", MessageBoxButton.OK);
48 break;
49 }
50 },
51 iRet);
52 },
53 _UserClient);
54 }
55 }
56 }

好了,完成。

转载于:https://www.cnblogs.com/yinxiangpei/articles/2622245.html

Silverlight + WCF异步调用 例子相关推荐

  1. 异步调用WCF的方法需要小心的地方

    直接使用下面的代码,由于client对象占用的资源没有被释放,会导致内存泄露 GetSimServiceReference.GetSimServiceClient client = new GetSi ...

  2. Ajax异步调用Web服务的例子

    我这里是看的Dflying Chen的使用ASP.NET AJAX异步调用Web Service和页面中的类方法的一系列文章写出来的例子. 请Dflying Chen别介意.例子中没有最后一篇文章的的 ...

  3. linux c调用wcf服务,Silverlight+WCF实现跨域调用

    在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...

  4. 将一个简单远程调用的方式例子改为异步调用 -- 2

    将一个简单远程调用的方式例子改为异步调用 第一版:https://www.cnblogs.com/nxzblogs/p/12766025.html 第二版:使用RxJava :(RxJava:http ...

  5. 将一个简单远程调用的方式例子改为异步调用

    将一个简单远程调用的方式例子改为异步调用 package com.xsxy.asynctest.test03;import java.util.ArrayList; import java.util. ...

  6. Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...

    前言: 近期在忙点"秋色园"的事情,所以网络象棋这一块文章就写的相对慢,而且刚好接上篇:Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)  之后, ...

  7. Silverlight WCF 初尝小结

    一年多的时间一直在等待Silverlight的稳定版本,但是从1.0 2.0 到现在的3.0BETA 一直吸引着我,于是终于按奈不住,一窥了Silverlight的魅力. Silverlight是什么 ...

  8. springboot 多线程_SpringBoot异步调用@Async

    一. 什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行. 二. 如何实现异步调用 ...

  9. Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界 ...

最新文章

  1. 商汤科技总裁张文谈人工智能: 未来10年到20年会有巨大爆发 下一个井喷是AI+教育
  2. [转载]使用C#的BitmapData
  3. android源码framework下添加新资源的方法
  4. mac mysql 安装日志_Mac 安装 MySQL
  5. SringBoot项目使用maven打包,使用docker部署,并且使用thymeleaf作为模板引擎遇到的问题
  6. SecureCRT 或者 超级终端 始终无法ping通主机
  7. word2vec介绍
  8. 银行家算法实验报告c语言版,银行家算法实验报告C语言版.doc
  9. 正则表达式:日期格式的校验(日期+时间)
  10. 20个软件开发常用设计文档大全下载
  11. 白鹭引擎android打包,白鹭引擎能把动画打包成小程序吗
  12. 携程集团CMO孙波入选“2021亚太营销领袖50强”榜单
  13. 深入学习typedef和typename
  14. HDU 2815 扩展baby step giant step 算法
  15. 基于Python的《庆余年》评论分析
  16. 黑科技神器-uTools
  17. 神马js都是浮云-----限时秒杀
  18. 用C语言求解一元高次方程论文,一元高次方程C语言实现(最高五次
  19. 加工中心计算机编程自学,如何快速学习数控加工中心编程
  20. Latex输入大小写罗马数字

热门文章

  1. R语言对矩阵按某一列排序
  2. 只不过是R.java文件的特性-----出错信息:R.java was modified manually! Reverting to generated version!...
  3. python中for和while区别_Python学习第九篇——while和for的区别
  4. linux中管道符的简单使用
  5. SAS宏保存以便快速调用的三种解决方案(转载)
  6. sizeof(string)
  7. 纯CSS实现React Logo图形,内含详细解析
  8. 产品经理经验谈100篇(四)-B端交互设计规范
  9. 【APICloud系列|11】使用APPuploader申请ios开发证书及ios发布证书教程
  10. php 接入微信 验证,PHP实现微信公众平台企业号验证接口