一个简单的webservice的demo(下)winform异步调用webservice

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

  一个简单的Webservice的demo,简单模拟服务

  一个简单的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     /// <summary>
11     /// AsyWeb 的摘要说明
12     /// </summary>
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.WebService
19     {
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 WFAsyC
12 {
13     public partial class form : Form
14     {
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             // 异步调用时用Asyn
34             ws.AsynchronousCallAsync(txtIn.Text);
35         }
36
37         /// <summary>
38         /// 调用成功后触发此事件
39         /// </summary>
40         /// <param name="sender">object</param>
41         /// <param name="e">EventArgs</param>
42         void ws_AsynchronousCallCompleted(object sender, WS.AsynchronousCallCompletedEventArgs e)
43         {
44             if (e.Error == null)
45             {
46                 // 若调用服务没有异常
47                 txtOut.Text = e.Result;
48             }
49             else
50             {
51                 txtOut.Text = "服务端出现异常!";
52             }
53         }
54     }
55 }

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

时间: 2024-12-06 10:58:59

一个简单的webservice的demo(下)winform异步调用webservice的相关文章

利用KBEngine +U3D 做的一个简单MMO手游Demo

利用KBE +U3D 做的一个简单MMO手游Demo目前只完成到一个普通攻击和一个火球术,  火球术需要点击怪物后才能释放.点击npc后会跳到一个副本.里面有一只半兽人. 欢迎大家来试玩 并提出宝贵意见.http://pan.baidu.com/s/1dDtVjnb 感谢kbe 一直以来的帮助.

Winform 中调用WebService

第一次在WINFORM中调用WebService,看了下别人的例子,感觉应该很简单. 参考了这位兄弟的内容 http://www.cnblogs.com/loveCloud/archive/2012/01/10/2317830.html 很迅速的完成了UI的制作,添加引用服务,嗯,输入WebService的地址,就能第一次体验结果了. 不过结果让我很失望:DeBug 一直提示我这句话...服务器无法处理请求. ---> 未将对象引用设置到对象的实例. 完了,两眼一抹黑.很自然的点了帮助,说是远程

由一个简单需求到Linux环境下的syslog、unix domain socket

本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参考rsyslog官网.另外,本文实验的环境实在debian8,如果是其他linux发行版本或者debian的其他版本,可能会稍微有些差异. 需求: 工作中有一个在Linux(debian8)环境下运行的服务器程序,用python语言实现,代码中有不同优先级的日志需要记录,开发的时候都是使用pytho

IDEA插件开发(一)一个简单的表单demo

?? 版本信息: ?? JDK:1.8+ ?? IDEA:2019.3 ?? 插件项目基于gradle构建. ?? 知识背景:swing ?? 参考文档: http://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html http://www.jetbrains.org/intellij/sdk/docs/user_interface_components/tool_windows.html

C#中Winform动态调用Webservice的方法(转)

一般情况下winform调用webservice时步骤 1添加服务引用---高级----添加web引用------填写url--添加web引用即可完成对webservice的引用 让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务. 如果需要动态调用WebService,要实现这样的功能: publicstaticobjectInvokeWebService(stringurl,  stringmethodname,object[] args) 其中,url是Web服务的地址,me

winform 动态调用webservice

一般情况下winform调用webservice时步骤 1添加服务引用---高级----添加web引用------填写url--添加web引用即可完成对webservice的引用 让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务. 如果需要动态调用WebService,要实现这样的功能: publicstaticobjectInvokeWebService(stringurl,  stringmethodname,object[] args) 其中,url是Web服务的地址,me

asp.net中异步调用webservice

WebService方法是不需要作任何修改的,只是在调用时采用异步的方式,这样在循环中,速度会显得快一点. 原来的方式: HotelMagWeb.com.china_sms.www.MainServices sms=new HotelMagWeb.com.china_sms.www.MainServices(); //实例化一个对象    string sSendRes=sms.massSend(); //直接调用方法 现在可以改为异步调用方式: HotelMagWeb.com.china_sm

一个简单的servlet的demo

javaweb  的应用我们需要参考javaee  api 查找servlet接口 javax.servletInterface Servlet All Known Subinterfaces: HttpJspPage, JspPage All Known Implementing Classes: FacesServlet, GenericServlet, HttpServlet public interface Servlet Implemented by: FacesServlet, Ge

一个简单的Socket通信Demo

都忘了哪里下的了,留个记录 服务器端Demo: Server.java(服务器端运行主程序,直接运行): package cn.wjs; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { private static final int port = 9999; private static final int backlog = 100