在分布式计算中经常要用到WebService,为了更好的学习WebService,写此文供自己记忆。
编译环境:VS2008
在项目中添加一个名称为MyWebService.asmx的Web服务,App_Code文件夹下会新增一个MyWebService.cs文件,编写代码如下:
using System; using System.Collections; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; /// <summary> ///MyWebService 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class MyWebService : System.Web.Services.WebService { public MyWebService () { //如果使用设计的组件,请取消注释以下行 //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hello World"; } }
写好WebService以后,在项目上右键选择“添加Web引用”,可以给WebService起一个命名空间localhost。
添加Web引用成功如下图所示:
下面我们写客户端代码
前端代码:
<form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="同步调用WebService" /> <asp:Button ID="Button2" runat="server" Text="异步调用WebService" /> <asp:Button ID="Button3" runat="server" Text="另一种异步调用WebService" /> </div> </form>
后台代码:
using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Button1.Click += new EventHandler(Button1_Click); Button2.Click += new EventHandler(Button2_Click); Button3.Click += new EventHandler(Button3_Click); } #region 同步调用 void Button1_Click(object sender, EventArgs e) { localhost.MyWebService mws = new localhost.MyWebService(); string s = mws.HelloWorld(); Response.Write("<script>alert('"+s+"')</script>"); //Response.End(); } #endregion #region 异步调用 void Button2_Click(object sender, EventArgs e) { localhost.MyWebService AsyMWS = new localhost.MyWebService(); IAsyncResult asyncResult = AsyMWS.BeginHelloWorld(new AsyncCallback(CallbackFunc), "AsyncState"); string s = AsyMWS.EndHelloWorld(asyncResult); Response.Write("<script>alert('" + s + "')</script>"); } void CallbackFunc(IAsyncResult r) { Response.Write("<script>alert('异步调用完成!')</script>"); } #endregion #region 另一种异步调用 void Button3_Click(object sender, EventArgs e) { localhost.MyWebService AsyMWS = new localhost.MyWebService(); AsyMWS.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(AsyMWS_HelloWorldCompleted); AsyMWS.HelloWorldAsync(); } void AsyMWS_HelloWorldCompleted(object sender, localhost.HelloWorldCompletedEventArgs e) { string s = e.Result; Response.Write("<script>alert('"+s+"')</script>"); } #endregion }