WCF的异步调用
1.服务契约
namespace Contracts
{
[ServiceContract]
public interface ICalculator
{
[OperationContract]
double Add(double x,double y);
}
}
2.服务实现
namespace Services
{
public class CalculatorService:ICalculator
{
public double Add(double x, double y)
{
return x + y;
}
}
}
3.宿主程序
namespace Hosting
{
class Program
{
static void Main(string[] args)
{ //通过配置文件获取相应的信息
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{ host.Opened += delegate
{
Console.WriteLine("服务已经启动,按任意键停止");
};
host.Open();
Console.Read();
} }
}
}
4.服务配置文件
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:6666/calculatorservice/metadata"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="metadataBehavior" name="Services.CalculatorService">
<endpoint address="http://127.0.0.1:6666/calculatorservice" binding="wsHttpBinding" contract="Contracts.ICalculator" ></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
5.添加服务引用


6.客户端调用(说明:利用异步方式执行服务操作,使得服务在执行过程中不会阻塞主线程,当方法执行完成后,通过AsyncCallback回调对应的方法,可以通知客户端服务执行完毕,从而使proxy.EndAdd()方法不会处于阻塞等待状态,而是等阻塞proxy.BeginAdd()执行完了再执行)
namespace Client
{
class Program
{
static void Main(string[] args)
{
//通过回调的方式进行异步服务调用
//通过上面的方式进行异步调用有一个不好的地方,就是当EndAdd方法被执行的时候
//如果异步执行的方法Add没有执行结束的话,该方法将会阻塞当前线程并等待异步
//方法的结束,这样往往不能起到多线程并发执行应有的作用。我么真正希望的是在
//异步执行结束后自动回调设定的操作,这样就可以采用回调的方式来实现这样的机制。
ServiceCalculator.CalculatorClient proxy = new Client.ServiceCalculator.CalculatorClient();
proxy.BeginAdd(, , delegate(IAsyncResult asyncResult)
{double result = proxy.EndAdd(asyncResult);
proxy.Close();
Console.WriteLine("x+y={2} when x={0} and y={1}", operands[], operands[], result);
}, null);
Console.Read();
}
}
}
WCF的异步调用的更多相关文章
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
- WCF 异步调用问题
添加引用时生成"勾选允许生成异步操作" Wcf异步调用三种方式: 第一种:直接调用异步方法 var serviceClient = new MyServiceClient(); s ...
- 序列化和反序列化,异步调用web/wcf/函数
//xml序列化 public static string Seria(DataSet ds) { XmlSerializer serializer = new XmlSerializer(typeo ...
- 如何实现异步调用WCF
在面向服务的.NET开发中,我们经常要调用WCF服务加载数据,这时候,如果使用同步调用,会阻止UI,影响用户体验UE/UX,而且当服务器ping不通或者网速特别烂的情况下,这时候基本上是处于卡死状态, ...
- 多线程编程学习笔记——异步调用WCF服务
接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...
- WCF异步调用
添加引用服务--高级--选中 生产异步操作 服务端接口操作 [OperationContract]int Add(int a, int b); 客户端: 引用服务:在引用服务时,左下角点击“高级”按钮 ...
- WCF系列教程之客户端异步调用服务
本文参考自http://www.cnblogs.com/wangweimutou/p/4409227.html,纯属读书笔记,加深记忆 一.简介 在前面的随笔中,详细的介绍了WCF客户端服务的调用方法 ...
- Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token
原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf? 因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...
- 异步调用WCF的方法需要小心的地方
直接使用下面的代码,由于client对象占用的资源没有被释放,会导致内存泄露GetSimServiceReference.GetSimServiceClient client = new GetSim ...
随机推荐
- Erstudio8.0怎么用?Erstudio8.0汉化版详细使用教程
Erstudio8.0使用教程 打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimension ...
- android studio升级时提示 Connection failed. Please check your network connection and try again
原文地址 http://www.eyeapk.com/android-studio-update.html Mac OSX中修改文件路径为 bin/idea.vmoptions ,添加如下内容,如果无 ...
- SpringBoot--属性加载顺序
属性加载顺序: 1.在命令行中传入的参数: 2.SPRING_APPLICATION_JSON中的属性:SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中内容: 3.j ...
- Code Forces 645B Mischievous Mess Makers
It is a balmy spring afternoon, and Farmer John's n cows are ruminating about link-cut cacti in thei ...
- 解决VMware Workstation虚拟机不能联网的解决办法
在windows服务中查看,以下几个服务是否正常开启,没有就开启
- Configuring Logging 配置日志
NGINX Docs | Configuring Logging https://docs.nginx.com/nginx/admin-guide/monitoring/logging/[ 在上层设置 ...
- 随笔 javascript-抽象工厂模式
随笔 javascript-抽象工厂模式 抽象工厂模式笔记 1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合) 2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽 ...
- 剑指Offer——和为S的两个数字
题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输入描述: 对应每个测试案例,输出两个数,小的先输出. ...
- setup.py
from distutils.core import setup # 使用说明 # 执行以下命令 # python3 setup.py build # python3 setup.py sdist(这 ...
- sql server中的孤立用户
此问题出现在数据库的移值上.移值后,数据库的登陆名和数据库用户名孤立,原数据中,用建立的用户名密码登陆可以访问数据库,但是移值后就不能访问了.而且如果您尝试向该登录帐户授予数据库访问权限,则会因该用户 ...