代码改变世界

AJAX与WebService

2009-12-05 18:23  血糯米Otomii  阅读(808)  评论(1编辑  收藏  举报

现在,异步的很流行,运用JS在不刷新页面的情况下,悄悄地去后台偷资料,这是一个及其让人兴奋地事情,同时,在具体操作上,Framework3.5也给我们提供了一个很优秀的平台,让我们可以轻松自如的控制AJAX,但是,自带的UpdatePanel并不能完全的处理所有的问题,前台的JS和后台的C#代码的交互性并不是很好,往往前台希望后台给予反应的时候,后台并不知道,这是非常令人恼火的,比如TextBox的TextChanged事件,所以,就有了AJAX+WebService这种模式,通过JS代码,直接向已经编写好的Web服务索取所需要的信息,这种主动地索要,比被动的期望后台反应要好得多,现在我就举个向后台索要数据的例子:

1.右键你的网站,然后添加Web服务(asmx后缀名),然后你就会获得一个WebService的基础代码

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>
///WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 
//[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{

    public WebService()
    {

        //如果使用设计的组件,请取消注释以下行 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

然后,你需要的是把[System.Web.Script.Services.ScriptService]前方的//去掉,然后你就可以使得你的Web服务对于JS代码有了相应的支持。然后添加ScriptManager控件,向程序中添加Web服务的申明。

<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService.asmx" />
</Services>
</asp:ScriptManager>

现在,所有工作都做好了,前台和服务都有了相应的支持,来吧,让我们写点JS代码来测试我们所有的努力:

function CallMethod() {
    WebService.HelloWorld(SucceededCallback);
}
function SucceededCallback(result) {
    alert(result);
}

只要执行CallMethod()就可以在Alert框中显示Hello World了

OK,回家洗洗睡