博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个简单的webservice的demo(下)winform异步调用webservice
阅读量:4982 次
发布时间:2019-06-12

本文共 2707 字,大约阅读时间需要 9 分钟。

  绕了一大圈,又开始接触winform的项目来了,虽然很小吧。写一个winform的异步调用webservice的demo,还是简单的。

  

  

  当winform同步调用服务时,由于调用服务不能像C/S那样快,winform的UI进程一直在等待服务的返回结果,就无法响应用户事件。为了解决这种问题,我们用异步调用。

  首先,先准备一个模拟用的webservice,如下:

  

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Threading; 5 using System.Web; 6 using System.Web.Services; 7  8 namespace WFasy 9 {10     /// 11     /// AsyWeb 的摘要说明12     /// 13     [WebService(Namespace = "http://tempuri.org/")]14     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]15     [System.ComponentModel.ToolboxItem(false)]16     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 17     // [System.Web.Script.Services.ScriptService]18     public class AsyWeb : System.Web.Services.WebService19     {20 21         [WebMethod(Description="模拟服务等待,返回输入字符的前三位")]22         public string AsynchronousCall(string code)23         {24             // 线程sleep5秒,模拟服务请求等待。25             Thread.Sleep(5000);26             if (code.Length >= 3)27                 return code.Substring(0, 3);28             return "***";29         }30     }31 }

  现在写winform客户端,引用服务:

  

  点击高级,选择生成异步操作(应注意)

  

  客户端代码:

  

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms;10 11 namespace WFAsyC12 {13     public partial class form : Form14     {15         public form()16         {17             InitializeComponent();18         }19 20         private void btnSure_Click(object sender, EventArgs e)21         {22             string inString = txtIn.Text;23             string outString = txtOut.Text;24 25             WS.AsyWebSoapClient ws = new WS.AsyWebSoapClient();26 27             // 在调用服务前,应注册调用完成事件,即“回调方法”28             // 一定要在异步调用前注册29             ws.AsynchronousCallCompleted += ws_AsynchronousCallCompleted;30 31             // 我们之前用这个方法调用服务32             // ws.AsynchronousCall(txtIn.Text);33             // 异步调用时用Asyn34             ws.AsynchronousCallAsync(txtIn.Text);35         }36 37         /// 38         /// 调用成功后触发此事件39         /// 40         /// object41         /// EventArgs42         void ws_AsynchronousCallCompleted(object sender, WS.AsynchronousCallCompletedEventArgs e)43         {44             if (e.Error == null)45             {46                 // 若调用服务没有异常47                 txtOut.Text = e.Result;48             }49             else50             {51                 txtOut.Text = "服务端出现异常!";52             }53         }54     }55 }

  最近很忙了,以后坚持写博客,写下一些最简单的demo,记录自己成长过程。这里暂且为下篇了,未来慢慢添加一系列webservice的后续篇章。

转载于:https://www.cnblogs.com/muyixiaoguang/p/3948109.html

你可能感兴趣的文章
PSexec以及xcopy的简单使用
查看>>
Postgresql迁移数据文件存放位置
查看>>
性能优化——存储性能优化
查看>>
写一篇博文介绍JSP
查看>>
C++笔记 3
查看>>
windows 2008 下C#调用office组件访问拒绝的解决方法(failed due to the following error: 80070005 拒绝访问)...
查看>>
golang-gin框架
查看>>
java程序中中常用到的linux操作
查看>>
asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料
查看>>
百度star2012初赛第一场的题目
查看>>
武汉第二十七天
查看>>
最长公共子序列
查看>>
MFC 鼠标去留
查看>>
怎么用xmind给自己制定计划目标
查看>>
word转PDF-jacob
查看>>
20条技巧,让Chrome超越Firefox
查看>>
正确释放WORD对象(COM组件) COMException: 被调用的对象已与其客户端断开连接
查看>>
Leetcode题解(一)
查看>>
SSIS报不能把DBNull convert成其他类型,Object等错误的解决办法
查看>>
【31】126. Word Ladder II
查看>>