Silverlight + WCF异步调用 例子

看大家好像对我的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

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

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

相关文章

小议SqlMapConfig.xml配置文件

①、mybatis-3-config.dtd 主要用于mybatis的核心配文件sqlMapConfig.xml的约束 sqlMapConfig.xml代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&q…

ffmepg 命令提取音视频数据

原文件&#xff1a; 1&#xff1a; 原音频数据提取&#xff08;保留还是mp4的封装格式的&#xff09;&#xff1a; ffmpeg -i test_1920x1080.mp4 -acodec copy -vn audio.mp4 -vn 就是没有视频&#xff0c; -acodec copy 音频拷贝不进行任何转码 原视频数据提取&#xff0…

【7】jQuery学习——入门jQuery选择器之过滤选择器-可见性过滤选择器

这篇什么都不说&#xff0c;看标题就知道了&#xff0c;很简单&#xff0c;就2个选择器&#xff0c;嘿嘿 选择器描述返回$("Element:hidden")选取所有不可见的元素集合元素$("Element:visible")选取所有可见元素集合元素这篇很简单吧&#xff0c;就2个&…

Mybatis中的核心配置文件SqlMapConfig.xml详细介绍

一、properties&#xff08;属性&#xff09; 可以引用java属性文件中的配置信息如下 jdbc.properties代码如下&#xff1a; jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/mybatis?characterEncodingutf-8 jdbc.usernameroot jdbc.passwordbeyond…

用Kotlin开发您的第一个应用程序| Android与Kotlin

In the previous article, we learned how to setup Kotlin in the android studio? Now moving to journey ahead we are going to develop our first app with Kotlin. It is the basic app, but it will let you know the structure of the program. 在上一篇文章中&#x…

(只需挨个复制粘贴命令即可部署)在Centos7下搭建文件服务器(VSFTPD)

观看北京尚学堂-百战程序员笔记一、VSFTPD简介 Linux的组件&#xff08;一款软件&#xff09;&#xff0c;安装到Linux后可以通过java代码&#xff08;FtpClient&#xff09;实现文件的上传。基于FTP协议。 由于VSFTPD是基于FTP协议&#xff0c;客户端浏览器是需要通过http协议…

bcd码二进制转十进制_二进制编码的十进制(BCD码)及其加法

bcd码二进制转十进制Prerequisite: Number systems 先决条件&#xff1a; 数字系统 BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers have their weights attached as 8, 4, 2, 1 from MS…

LINQ to XML:如何读写XCData

using System;using System.Xml.Linq;namespace ConsoleApplication1 {class Program{static void Main(string[] args){//写入CDATA元素块var doc new XElement("Test",new XElement("User",new XAttribute("name", "chenxizhang"),…

云服务器(Centos)部署SVN

1&#xff0c;安装svn yum install subversion 2&#xff0c;查看版本号 svnserve --version 3&#xff0c;创建SVN版本库&#xff08;在var/svn 文件夹下&#xff09; 新建文件夹 mkdir -p /var/svn/svnrepos 创建版本库 svnadmin create /var/svn/svnrepos 4&#xff0c;修改…

ffmpeg命令mp3中提取pcm格式

原mp3文件: ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm &#xff08;这可能是pcm原格式查不到什么信息但是可以播放的&#xff1a;ffplay -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm&#xff09; ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -samp…

bfs广度优先搜索算法_图的广度优先搜索(BFS)

bfs广度优先搜索算法What you will learn? 您将学到什么&#xff1f; How to implement Breath first search of a graph? 如何实现图的呼吸优先搜索&#xff1f; Breadth First Search is a level-wise vertex traversal process. Like a tree all the graphs have verte…

ffmpeg 命令转封装

1&#xff1a; 改变编码格式 原mp4文件:视频是h264 音频是aac 视频转成h265&#xff0c;音频转成mp3&#xff08;容器为mkv&#xff0c;有些容器不一定支持放h265的&#xff09; ffmpeg -i test_60s.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv 播放&#xff1a…

弗林的计算机体系结构分类

计算机体系结构分类 (Classification of computer architecture) According to Flynns there are four different classification of computer architecture, 根据弗林的说法&#xff0c;计算机体系结构有四种不同的分类&#xff0c; 1)SISD(单指令单数据流) (1) SISD (Single…

Assert和异常处理

Assert用于检查不应该发生情况&#xff0c;用来帮助开发人员对问题的快速定位。异常处理用于对程序发生异常情况的处理&#xff0c;增强程序的健壮性、容错性&#xff0c;减少程序使用中对用户不有好的行为&#xff0c;不让(通常也不必)用户知道发生了什么错误。实际开发中&…

ffmpeg 命令裁剪合并

1 mp4格式&#xff1a; 裁剪从一个视频中的1分钟、2分钟、3分钟开始截取10秒 ffmpeg -i test_1280x720.mp4 -ss 00:01:00 -t 10 -codec copy copy1.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:02:00 -t 10 -codec copy copy2.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:03:00 -t 10…

Struts2初始化流程及源码分析

1.1 Struts2初始化 在讲Struts2的初始化之前&#xff0c;应该为大家描述下Web应用中的过滤器Filter&#xff0c;这关系到我们对核心过滤器FilterDispatcher的正确理解。 Filter&#xff1a;一个filter是一个对象&#xff0c;为每个请求资源(一个servlet或静态内容) &#xff0c…

ffmpeg 命令图片和视频相互转换

1当前文件环境&#xff1a; ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp 使用ffplay test.jpb ffplay test.bmp 都是可以打开的 参数介绍&#xff1a; -y 如…

ffmpeg命令 拉流

1&#xff1a; 拉流播放:rtmp &#xff08;ffplay rtmp://server/live/streamName&#xff09; ffplay -x 480 -y 320 rtmp://58.200.131.2:1935/livetv/cctv1 2&#xff1a; 拉流存储到文件:rtmp ffmpeg -i rtmp://58.200.131.2:1935/livetv/cctv1 -codec copy cctvrtmp.f…

ffmpeg 命令过滤器裁剪

1 图片操作&#xff1a; 原图&#xff1a; 使用ffplay 显示左半边 ffplay -i input.png -vf cropiw/2:ih:0:0 可以通过ffmpeg 保存 ffmpeg -i input.png -vf cropiw/2:ih:0:0 out.png 2 视频操作&#xff1a; 原视频&#xff1a; 显示左半边 ffplay -i cctvhttp.flv -vf …

[iphone-cocos2d]分享一段Objective-C可调用的游戏中播放音乐(1)

首先需要引入AudioTool 这个framework 代码 -(id)initWithPath:(NSString *)path{ UInt32 size, maxPacketSize; char*cookie; inti; if(gThereIsAnActiveTrack) { NSLog("*** WARNING *** GBMusicTrack only plays one track at a time…