WebService 是一种概念吗?你又是如何理解的呢?
之前,我写的程序为了让代码和Html分开是用的 Request 对象,然后Switch 一下..WebService SOAP 神马的概念一头雾水,看了WebService的例子之后发现也就是在这个基础上省了一个Swith 方法,因为它直接把方法生成了url的一部分。
下面写一个最简单的WebService 并指出其中所注意的事项
1.VS2010 不支持 WebService?
新建的时候,把.NET FrameWork 4.0 改成3.5 或者一下 新建Web服务后再改成 4.0
为了让他们支持JSON 要是改成了2.0 就要记得在建立工程后改回来
2.WebService 只能返回XML数据?
在方法上面加上这一句就可以返回XML数据了
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
需要添加以下引用
using System.Web.Script.Services;
3.若要允许使用 AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。否则Ajax 调用Web服务时会报HTTP 500 错误
[System.Web.Script.Services.ScriptService]
写下如下的代码:
using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Services; using System.Web.Services; namespace TestService { [WebService(Namespace = "http://localhost/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string HelloWorld() { return "Hello World"; } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public User GetOneUserInfo(string name, int age) { return (new User { Name = name, Age = age }); } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public User[] GetUsers(string name, int age) { List<User> res = new List<User>(); res.Add(new User { Name = name + "1", Age = age }); res.Add(new User { Name = name + "2", Age = age }); return res.ToArray(); } } public class User { public string Name { get; set; } public int Age { get; set; } } }
写下如下的测试 html
<input type="button" id="ipt1" value="test" /> <script type="text/javascript" src="jquery-1.8.2/jquery-1.8.2.js"></script> <script type="text/javascript"> function GetInfo() { $.ajax({ type: "POST", url: "/Service1.asmx/GetOneUserInfo", contentType: "application/json; charset=utf-8", dataType: 'json', data: "{name:'aaaa',age:29}", success: function (data) { if (data.hasOwnProperty("d")) { res = data.d; alert(res.Name); } else res = data; } }); } $('#ipt1').click(function () { GetInfo(); }); </script>
1.HTTP POST 过去参数的名称,对应 WebService 函数中参数的名称,windows 的 WebService 接收不按照顺序,按照名称,而且不区分大小写
2.服务器返回的对象直接序列化成Json 按照程序所示,可以通过data.d 得到其对象,不知道支不支持多个list的Json,可以试试
3.调试过程的请求时,仍然会有HTTP 500 错误,看来只有部署上WebService 才能解决这个问题了