编写 WebService 程序

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 才能解决这个问题了

 

posted @ 2012-10-30 17:45  oftenlin  阅读(2014)  评论(0编辑  收藏  举报