.NET3.5下Asp.net如何异步调用WebService

在网上也找了一些,发现要么题目和内容不对应,明明是在Winform下异步调用,却写成在Asp.net异步调用WebService,有的调用方式在.NET3.5下不能通过,.NET3.5下取消了BeginXXXX,EndXXXX,奇怪,而用了以下方式。

建立一个WebService和一个WebApplication如图所示:

.NET3.5下Asp.net如何异步调用WebService

WebService代码为:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

namespace WebService1

{

/// <summary>

/// Service1 的摘要说明

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

public class Service1 : System.Web.Services.WebService

{

[WebMethod]

public string HelloWorld()

{

return "Hello World";

}

}

}

以下为同步调用WebService

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebApplication1

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

//同步调用WebService

Response.Write("aaa<br>");

localhost.Service1 n = new localhost.Service1();

Response.Write(n.HelloWorld().ToString()+"<br/>");

Response.Write("bbb<br>");

}

}

}

输出结果:

aaa

Hello World

bbb

以下为异步调用WebService

1、需要在Default.aspx页的Page里加入Async="true"

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" Async="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

</div>

</form>

</body>

</html>

2、在Default.aspx.cs里代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebApplication1

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

//异步调用WebService

Response.Write("aaa<br>");

localhost.Service1 n = new localhost.Service1();

n.HelloWorldCompleted += delegate(object sender2, localhost.HelloWorldCompletedEventArgs e2)

{

//e.Result获取处理结果

Response.Write(e2.Result.ToString()+"<br/>");

};

n.HelloWorldAsync();

Response.Write("bbb<br>");

}

}

}

运行结果:

aaa

bbb

Hello World

试验结果:发现Hello World时在输出aaa,bbb之后输出Hello World的。

使用总结:

1、在ASPX页面设置一个允许异步调用的属性 Async="true"这样就可以在这个页面里进行异步调用了

2、同步调用的方法和异步调用的方法不一样,异步调用的方法是WebServic的方法名+Async()作为方法名,同步调用的方法就是WebService的方法名。

以上采用了匿名方法。将方法体的代码和委托对象相关联,如果要单独定义一个方法,代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebApplication1

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

//异步调用WebService

Response.Write("aaa<br>");

localhost.Service1 n = new localhost.Service1();

n.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted);

n.HelloWorldAsync();

Response.Write("bbb<br>");

}

//完成事件处理方法

void HelloWorldCompleted(object sender, localhost.HelloWorldCompletedEventArgs e)

{

if (e.Error != null)

throw e.Error;

Response.Write(e.Result.ToString() + "<br>"); //e.Result获取处理结果

}

}

}

你可能感兴趣的:(.net,Web,webservice,asp.net,asp)