ASP. NET中的webservice

在分布式计算中经常要用到WebService,为了更好的学习WebService,写此文供自己记忆。

编译环境:VS2008

在项目中添加一个名称为MyWebService.asmx的Web服务,App_Code文件夹下会新增一个MyWebService.cs文件,编写代码如下:

[csharp] view plain copy print ?
  1. using System;  
  2. using System.Collections;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Services;  
  6. using System.Web.Services.Protocols;  
  7. using System.Xml.Linq;  
  8.   
  9. /// <summary>  
  10. ///MyWebService 的摘要说明  
  11. /// </summary>  
  12. [WebService(Namespace = "http://tempuri.org/")]  
  13. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
  14. //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。   
  15. // [System.Web.Script.Services.ScriptService]  
  16. public class MyWebService : System.Web.Services.WebService {  
  17.   
  18.     public MyWebService () {  
  19.   
  20.         //如果使用设计的组件,请取消注释以下行   
  21.         //InitializeComponent();   
  22.     }  
  23.   
  24.     [WebMethod]  
  25.     public string HelloWorld() {  
  26.         return "Hello World";  
  27.     }  
  28.       
  29. }  

写好WebService以后,在项目上右键选择“添加Web引用”,可以给WebService起一个命名空间localhost。

ASP. NET中的webservice_第1张图片

添加Web引用成功如下图所示:

ASP. NET中的webservice_第2张图片

下面我们写客户端代码

前端代码:

[html] view plain copy print ?
  1. <form id="form1" runat="server">  
  2.     <div>  
  3.         <asp:Button ID="Button1" runat="server" Text="同步调用WebService"  />  
  4.         <asp:Button ID="Button2" runat="server" Text="异步调用WebService"  />  
  5.         <asp:Button ID="Button3" runat="server" Text="另一种异步调用WebService"  />  
  6.     </div>  
  7. </form>  

后台代码:

[csharp] view plain copy print ?
  1. using System;  
  2. using System.Configuration;  
  3. using System.Data;  
  4. using System.Linq;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.HtmlControls;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.WebControls.WebParts;  
  11. using System.Xml.Linq;  
  12.   
  13. public partial class _Default : System.Web.UI.Page   
  14. {  
  15.     protected void Page_Load(object sender, EventArgs e)  
  16.     {         
  17.        Button1.Click += new EventHandler(Button1_Click);  
  18.        Button2.Click += new EventHandler(Button2_Click);  
  19.        Button3.Click += new EventHandler(Button3_Click);  
  20.     }  
  21.  
  22.  
  23.     #region 同步调用  
  24.   
  25.     void Button1_Click(object sender, EventArgs e)  
  26.     {  
  27.         localhost.MyWebService mws = new localhost.MyWebService();  
  28.         string s = mws.HelloWorld();  
  29.         Response.Write("<script>alert('"+s+"')</script>");  
  30.         //Response.End();  
  31.     }  
  32.  
  33.     #endregion  
  34.  
  35.  
  36.     #region 异步调用  
  37.   
  38.     void Button2_Click(object sender, EventArgs e)  
  39.     {  
  40.         localhost.MyWebService AsyMWS = new localhost.MyWebService();  
  41.         IAsyncResult asyncResult = AsyMWS.BeginHelloWorld(new AsyncCallback(CallbackFunc), "AsyncState");  
  42.         string s = AsyMWS.EndHelloWorld(asyncResult);  
  43.         Response.Write("<script>alert('" + s + "')</script>");  
  44.     }  
  45.   
  46.     void CallbackFunc(IAsyncResult r)  
  47.     {  
  48.         Response.Write("<script>alert('异步调用完成!')</script>");  
  49.     }  
  50.  
  51.     #endregion  
  52.  
  53.  
  54.     #region 另一种异步调用  
  55.   
  56.     void Button3_Click(object sender, EventArgs e)  
  57.     {  
  58.         localhost.MyWebService AsyMWS = new localhost.MyWebService();  
  59.         AsyMWS.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(AsyMWS_HelloWorldCompleted);  
  60.         AsyMWS.HelloWorldAsync();  
  61.     }  
  62.   
  63.     void AsyMWS_HelloWorldCompleted(object sender, localhost.HelloWorldCompletedEventArgs e)  
  64.     {  
  65.         string s = e.Result;  
  66.         Response.Write("<script>alert('"+s+"')</script>");  
  67.     }  
  68.  
  69.     #endregion  
  70. }  

注:若要使用最后一种异步调用方式需要在前端代码中写入Async="true",如下图


你可能感兴趣的:(ASP. NET中的webservice)