谈谈异步请求吧


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

如果终结点绑定类型是“wsHttpBinding”就要改下啦, 改成“wsDualHttpBinding”, 还有就是 

服务行为别忘了哦: [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]

来来来 (~o ̄▽ ̄)~o 添加个服务先

 1 public void Register(string name, string pass)
 2 {
 3     ICallBackContract callBack = OperationContext.Current.GetCallbackChannel();
 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.CallBackContract
2 {
3     [ServiceContract]
4     public interface ICallBackContract
5     {
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             else
12                 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));

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

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