多线程编程学习笔记——异步调用WCF服务
接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端
本示例描述了如何创建一个WCF服务,并宿主在命令行应用程序中,客户端可以访问服务元数据,并以异步的方式消费它。
首先,我们创建了一个WCF服务。关于如何创建WCF服务,可以参考我之前的文章(WCF学习之旅—第三个示例之一(二十七)至WCF学习之旅—第三个示例之五(三十一))
然后,我们进行异步调用WCF的代理代码的生成。
第三、在visual studio 的资源管理器中,鼠标右键,在弹出菜单中选择“添加服务引用…”。如下图。

第四、在“添加服务引用”界面中,在选中需要添加的服务之后,点击“高级”按钮,在“服务引用设置”中选中“生成异步操作”,然后点击“确定”。如下图。

第五, 在解决方案资源管理器中,选中“FrmBook.cs”文件,在弹出的右键菜单中选择“打开”,或者使用鼠标左键双击。
第六, 在FrmBook.cs界面中,添加“异步查询选中书籍”按钮,并用鼠标双击按钮。
第七, 然后在 buttonAsyncGetBook_Click事件处理程序中添加以下代码:
/// <summary>
/// 异步查询书籍信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonAsyncGetBook_Click(object sender, EventArgs e)
{
Books book = new Books();
var client=GetAsyncBook(book); // client.GetAwaiter().GetResult();
// ShowBook();
} private async Task GetAsyncBook(Books book)
{ BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
if (gridBooks.SelectedRows.Count > )
{
book = gridBooks.SelectedRows[].DataBoundItem as Books;
textBoxMsg.Text = book.BookID.ToString();
await Task.Delay();
var result = bookSvrClient.GetBookAsync(book.BookID.ToString());
textBoxMsg.Text = result.Result;
}
else
{
textBoxMsg.Text = "没有选中相应的记录!";
}
}
第八,使用异步调用WCF的这个服务之后,得到的结果如下图。我的截图跟WCF学习之旅—第三个示例系列 略微有点区别。

多线程编程学习笔记——异步调用WCF服务的更多相关文章
- 多线程编程学习笔记——使用异步IO(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
- 多线程编程学习笔记——使用异步IO
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
- 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端
接上文 多线程编程学习笔记——使用异步IO 二. 编写一个异步的HTTP服务器和客户端 本节展示了如何编写一个简单的异步HTTP服务器. 1.程序代码如下. using System; using ...
- 多线程编程学习笔记——async和await(一)
接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...
- 多线程编程学习笔记——async和await(二)
接上文 多线程编程学习笔记——async和await(一) 三. 对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token
原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf? 因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...
- WPF异步调用WCF服务
wpf调用wcf时,第一次访问总耗时到达几秒,影响界面的用户体验,因此在wpf加载界面和加载数据时采用异步加载,即异步访问wcf服务, 由于是否采用异步加载和服务端无关,仅仅由客户端自己根据需要来选择 ...
- [Java123] JDBC and Multi-Threading 多线程编程学习笔记
项目实际需求:DB交互使用多线程实现 多线程编程基础:1.5 :( (假设总分10) 计划一个半月从头学习梳理Java多线程编程基础以及Oracle数据库交互相关的多线程实现 学习如何通过代码去验证 ...
随机推荐
- android CheckBox与监听
<CheckBox android:id="@+id/cb1" android:layout_width="fill_parent" android ...
- 【转】globk和glorg中使用的apr文件
gamit和globk分析设置先验坐标和速度的要求和规则是不同的,因为在不同的阶段和环境下需要不同.从相位数据和松弛约束坐标和它们的方差得到的精 密坐标的可靠估计是假设对先验值的调整很小,也就是说在调 ...
- 华为交换机boot默认密码
交换机系统启动bootrom时,在2秒内按下"CTRL+B",此处需要输入密码才能进入BOOTROM菜单.默认密码如下: 1. S9300 V100R006及其之前的版本:9300 ...
- java 数组与集合(list)相互转化
上代码 package com.core.array2collection; import java.util.ArrayList; import java.util.Arrays; import j ...
- template.compile()方法
template.compile(source, options) source:必传,渲染模板的内容. options:可选,通常不传.(其实是我还没研究明白) return:一个渲染函数. 示例如 ...
- JAVA设计模式---装饰者模式
写在前面的话: 该模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案.装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的 ...
- LINUX文件定位
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- c#控制WPF程序自动登录(Automation方式实现)
说明:winForm窗体,可以通过win32接口dll的findWindow之类的函数来实现查找winform窗口,mfc窗口等. 但是wpf却是不实用这些,可以靠automation方式来进行操作. ...
- BZOJ 3505: [Cqoi2014]数三角形 [组合计数]
3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans ...
- Centos7新功能
Centos7 单用户模式 centos7里不再有0-6启动级别,而是4个target graphical.target 多人模式,支持图形和命令行两种登录,对应之前的3,5级别 mul ...