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

            }

        }

    }

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

  • 相关阅读:
    Jmeter(二十七) 从入门到精通 Jmeter Http协议录制脚本(详解教程)
    Jmeter(二十六) 从入门到精通 搭建开源论坛JForum(详解教程)
    [Erlang0003][OTP] Efficiency Guide User's Guide > Common Caveats
    [Erlang0008][OTP] 高效指南 表和数据库(ets mnesia)
    [Erlang0004][OTP] 高效指南 二进制的构造和匹配(1)
    [Erlang0002][OTP] Efficiency Guide User's Guide > The Eight Myths of Erlang Performance
    [Erlang0010][News]OTP 技术委员会 影响R16的决策 (OTP Technical Board Decisions affecting R16 翻译)
    [Erlang0007][OTP] 高效指南 函数
    [Erlang0005][OTP] 高效指南 二进制的构造和匹配(2)
    [Erlang0001][OTP] Efficiency Guide User's Guide>Introduction
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4883493.html
Copyright © 2020-2023  润新知