谈谈异步请求吧

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

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

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

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

你可能感兴趣的:(异步请求)