最近在看一些关于webServices的资料,做了一个下例子整理一下,主要包括.net平台下创建services服务、后台访问和前端Ajax访问三部分。
一、创建webServices服务。
1、打开vs(本人2012),新建项目—>Web—>ASP.NET空Web空应用程序。
2、在项目上右击选择“添加新建项目”--->Web->Web服务。
3、添加两个方法:
1>根据阿拉伯数字获得大写的文字
2>获得用户列表
代码和普通的C#代码一样整体代码下:
1 using System.Collections.Generic; 2 using System.Web.Services; 3 4 namespace WebServices 5 { 6 [WebService(Namespace = "http://tempuri.org/")] 7 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 8 [System.ComponentModel.ToolboxItem(false)] 9 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 10 [System.Web.Script.Services.ScriptService] 11 public class GetBigString : WebService 12 { 13 /// <summary> 14 /// 根据阿拉伯数字或得大写 15 /// </summary> 16 /// <param name="number"></param> 17 /// <returns></returns> 18 [WebMethod] 19 public string ConvertBit(int number) 20 { 21 string str; 22 switch (number) 23 { 24 case 1: 25 str = "一"; 26 break; 27 case 2: 28 str = "二"; 29 break; 30 case 3: 31 str = "三"; 32 break; 33 default: 34 str = "请输入正确的一位数字"; 35 break; 36 } 37 return str; 38 } 39 40 /// <summary> 41 /// 获得学生集合 42 /// </summary> 43 /// <param name="stringId"></param> 44 /// <returns></returns> 45 [WebMethod] 46 public List<Studnet> GetStudentList(string stringId) 47 { 48 var list = new List<Studnet>(); 49 var t = new Studnet { Address = "湖北省通城县咸宁市隽水镇", Age = 10, Name = "张三" }; 50 var t2 = new Studnet { Address = "北京市海淀区", Age = 10, Name = "李四" }; 51 list.Add(t); 52 list.Add(t2); 53 return list; 54 } 55 } 56 57 public class Studnet 58 { 59 public string Name { get; set; } 60 61 public int Age { get; set; } 62 63 public string Address { get; set; } 64 65 } 66 }
将该asmx文件设为启动项,运行项目,就能看到该services的说明文件,如:”支持下列操作。有关正式定义,请查看”服务说明“字样。 点击在地址栏加上“?WSDL”或者点击“服务说明”,既可查看该webservices的说明文档,如:http://localhost:4828/GetBigString.asmx?WSDL。总之,能看到该页面,既说明服务启动成功。为了等下客户端调用方便,可将该程序部署到IIS中。
二、在程序中通过引用服务的方式调用
1、另外新建一个web项目。
2、在"引用"上右击选择:”添加服务引用...“
3、输入刚才浏览器中运行的服务地址,点击”转到“。(如果没有部署的IIS上,那么在添加引用的时候,需要将该服务项目运行起来,否则不能添加引用)
4、输入自定义命名空间,点击确定即可。项目中即出现"Service References"文件夹。
5、在项目中,通过实例化类的方式,调用服务。
我在web项目中添加了一个aspx文件,在后台cs代码中添加如下代码:
1 using System; 2 using System.Web.UI; 3 using WebServices; 4 5 namespace Client 6 { 7 public partial class Index : Page 8 { 9 protected void Page_Load(object sender, EventArgs e) 10 { 11 // 调用WebServices,将结果赋值给页面控件 12 TextBox1.Text = GetNumberString(1); 13 } 14 15 private string GetNumberString(int numner) 16 { 17 // 实例化服务类 18 var g = new GetBigString(); 19 var str = g.ConvertBit(numner); 20 return str; 21 } 22 } 23 }
页面代码如下:
1 <body> 2 <form id="form1" runat="server"> 3 <div> 4 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 5 </div> 6 </form> 7 </body>
运行该web项目,页面即可出现相应的结果。显示:”一“
主意:在运行web客户端项目的时候,WebServices项目需要启动。
三、用ajax的方式调用WebServices
还是上面的WebServices服务,我们通过前端ajax调用,js代码如下:
1 <script type="text/javascript"> 2 $(document).ready(function () { 3 $.ajax({ 4 type: "post", //访问WebService使用Post方式请求 5 url: "http://localhost:8066/GetBigString.asmx/GetStudentList"//WebService的地址和方法名称组合 6 data: "{stringId:'1'}", //Email参数 7 contentType: "Application/Json", // 发送信息内容编码类型 8 success: function (data) { 9 console.log(data.d); 10 } 11 }); 12 }); 13 </script>
即可在控制台输出WebServices中的list数据对应的json数据了。
四、需要主意的几点:
1、在通过添加服务引用,或者通过ajax调用的过程中,WebServices项目相应是运行状态。
2、我们在GetStudentList方法中,定义了一个string类型的参数,虽然项目中没有用到,但是在ajax调用的时候,必须传参,否则报错。
3、在传递参数的时候,需要把整个参数部分用单引号括起来。
4、如需要ajax调用,需要取消WebServices类文件的第一行注释代码:
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
[System.Web.Script.Services.ScriptService]
5、在ajax调用中,会出现ajax请求跨域的问题。
到此实例结束,技术有限,简单实列仅供入门参考。