首页 > 代码库 > 谈谈异步请求吧

谈谈异步请求吧

第一种呢,就是“双工模式”了

如果终结点绑定类型是“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));

参考链接:基于通道什么的

至于另外一种异步和服务端异步处理等想起来再补上吧 (●ˇ∀ˇ●)

谈谈异步请求吧