WebServers 异步

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

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

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获取处理结果

}

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 17:32:08

WebServers 异步的相关文章

cocos2dx lua中异步加载网络图片,可用于显示微信头像

最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能会提供这个功能的地方,发现好像没有提供类似功能,那么只能自己动手写.所以我在ImageView这个类里面添加了一个成员方法,其实可以不写在ImageView里,而且我觉得非必需情况下还是不要修改引擎源码的好,因为如果源码改动比较多的话,将来引擎版本升级会比较麻烦.我写在ImageView里纯粹是想偷

学习笔记12JS异步请求

*一般用JS来监听按钮事件,都应该先监听页面OnLoad事件. *Js写在哪里,就会在页面解析到哪里执行. 异步请求:所谓异步请求,就是使用JS来监听按钮点击事件,并且发送请求,等到回复后,再使用JS来进行页面跳转,或动态改变页面.使用场合:当请求是ashx是,都可以使用异步方法,页面就无需刷到ashx的一个空白页面或者不用于展示的页面了. *使用jquery发送异步请求:$("#按钮ID").Click(fuction(){ $.get( "页面URL.ashx"

同步异步中的一致性

简述一致性中关于同步与异步环境下的共识理论 (##转载请注明) 共识问题:可称作协作,所有正确的进程对提议的值达成一致.分布式系统中,节点之间通过通信,对请求达成一致的定序. 问题定义:进程Pi处于未决状态(undecideed),提议集合D中的某个值Vi.进程之间相互通信,交换各自的提议.每个进程设置自己的决定变量(decision variable),进入决定状态(decided),此状态下不改变di的数值. 要求满足如下几个性质: 终止性(Termination):正确的进程最终都可以设置

信号驱动和异步驱动的区别

5种I/O模型: 1.阻塞I/O 2.非阻塞I/O 3.异步I/O 4.信号驱动I/O 5.I/O复用 信号驱动和异步驱动的区别 信号驱动IO是指:进程预先告知内核,使得 当某个socketfd有events(事件)发生时,内核使用信号通知相关进程. 异步IO(Asynchronous IO)是指:进程执行IO系统调用(read / write)告知内核启动某个IO操作,内核启动IO操作后立即返回到进程.IO操作即内核当中的服务例程. 异步I/O和信号驱动I/O的区别很容易被混淆.前者与后者的区

java中同步和异步有什么异同?

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程: 异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待. 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式. 哪些情况建议使用同步交互呢?比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互.

019-JQuery(Ajax异步请求)

使用jquery完成异步操作 ->开发文档提供的异步API url:请求地址 type:请求方式,主要是get.post data:{}:请求的数据 dataType:返回值的类型,主要有xml.text.json.script.html success:function(data){...}成功的回调函数(4,200) GetTime.html 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml&q

异步处理未登录url跳转

http://localhost:8080/xxx/login?url=http://localhost:8080/xxx/oldurl // 从url中获取原页面url=http://localhost:8080/xxx/oldurl function GetQueryString(paras){ var url = location.href; var paraString = url.substring(url.indexOf("?")+1,url.length).split(&

生产者消费者模型实现多线程异步交互

[Python之旅]第六篇(五):生产者消费者模型实现多线程异步交互 消息队列 生产者消费者模型 多线程异步交互 摘要:  虽然标题是"生产者消费者模型实现多线程异步交互",但这里要说的应该还包括Python的消息队列,因为这里多线程异步交互是通过Python的消息队列来实现的,因此主要内容如下: 1 2 3 4 1.生产者消费者模型:厨师做包子与顾客吃包子 2.Python的消息队列 3.利用... 虽然标题是"生产者消费者模型实现多线程异步交互",但这里要说的应

Atitit.异步编程技术原理与实践attilax总结

1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模式(推荐)1 4. Java的实现模式futuretask 对于c#的task类库(推荐)1 4.1. 使用Java 8的CompletableFuture实现函数式的回调.htm2 5. Timer模式2 6. Thread模式(不推荐,太底层)2 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await 2. 事