首页 > 代码库 > 谈谈异步请求吧
谈谈异步请求吧
第一种呢,就是“双工模式”了
如果终结点绑定类型是“wsHttpBinding”就要改下啦, 改成“wsDualHttpBinding”, 还有就是
服务行为别忘了哦: [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]
来来来 (~o ̄▽ ̄)~o 添加个服务先
1 public void Register(string name, string pass) 2 { 3 ICallBackContract callBack = OperationContext.Current.GetCallbackChannel<ICallBackContract>(); 4 if (name.Length < 6 || pass.Length < 6) 5 { 6 callBack.Reply("1"); 7 } 8 else 9 {10 callBack.Reply("0");11 }12 }
come on,首先跟普通的服务约定一样,要先定义一个回调模板。不过呢,不需要实现,因为实现是客户端的事
1 namespace ServiceLib.CallBackContract2 {3 [ServiceContract]4 public interface ICallBackContract5 {6 [OperationContract]7 void Reply(String message);8 }9 }
然后呢,就是客户端实现这个接口咯
1 namespace Client.ClientCalcBack 2 { 3 class MyCallBack:ICalcServiceCallback 4 { 5 public void Reply(string msg) 6 { 7 if (msg == "0") 8 Console.WriteLine("注册成功"); 9 else if (msg == "1")10 Console.WriteLine("注册失败,用户信息不符合要求");11 else12 Console.WriteLine("错误信息:" + msg);13 }14 }15 }
最后就是消费这个服务了
1 InstanceContext callBack = new InstanceContext(new MyCallBack());2 CalcServiceClient service = new CalcServiceClient(callBack, "WSDualHttpBinding_ICalcService");3 String name, pass;4 Console.WriteLine("Please input name:");5 name = Console.ReadLine();6 Console.WriteLine("Please input pass:");7 pass = Console.ReadLine();8 service.Register(name, pass);
(-?-;) 这个算不算异步呢?
第二种 客户端异步调用
我用的是VS2013社区版,然后呢,它默认生成异步方法(基于任务的操作)
直接使用就可以啦
1 var t = service.WelComeAsync(name);2 t.ContinueWith(task => Console.WriteLine(task.Result));
参考链接:基于通道什么的
至于另外一种异步和服务端异步处理等想起来再补上吧 (●ˇ∀ˇ●)
谈谈异步请求吧
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。