动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

异步调用Web Service

09-15 17:01 49浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Web Service是一款用于开发分布式的交互操作的应用程序异步调用Web Service对于Web Service的使用流畅性起到了至关重要的作用,能够有效的避免多线程的死锁问题。

net2.0环境下,Web service中的每个方法,在Client端添加引用后生成的代理类中都会产生相应的异步方法和结束事件。我们可以利用这个异步方法和事件,轻松实现异步调用web service

    假设在web service中定义了一个数据查询的方法:

[WebMethod]

   public DataSet ExecuteQuery(string SQL)

        {

            using (OracleConnection conn = new OracleConnection(connstrSQL))

            {

                try

                {

                    conn.Open();

 

                    OracleCommand cmd = new OracleCommand(sql,conn);

 

                    OracleDataAdapter ada = new OracleDataAdapter(cmd);

                    DataSet ds = new DataSet();

                    ada.Fill(ds);

 

                    return ds;

                }

                catch (OracleException ex)

                {

                    throw new Exception(ex.Message);

                }

                finally

                {

                    conn.Close();

                }

 

        }

    客户端:

///说明:

///panel1中放置了动态加载字样的图 片等

///   

 public partial class frmStock : Form

    {

        Service.MyService w = new Service.MyService(); //调用web service

 

        public frmStock()

        {

            InitializeComponent();

        }

 

        private void frmStock_Load(object sender, EventArgs e)

        {

            //添加异步方法执行后触发事件

            w.ExecuteQueryCompleted += new WMS.ExecuteQueryCompletedEventHandler(w_ExecuteQueryCompleted);

 

        }

 

        private void btnFind_Click(object sender, EventArgs e)

        {

            string sql = "select * from test";

 

             w.ExecuteQueryAsync(sql);  //调用对应异步方法

 

             ChangeStatus(true);

 

        }

 

        void w_ExecuteQueryCompleted(object sender, WMS.ExecuteQueryCompletedEventArgs e)

        {

net2.0环境下,Web service中的每个方法,在Client端添加引用后生成的代理类中都会产生相应的异步方法和结束事件。我们可以利用这个异步方法和事件,轻松实现异 步调用web service.

    简单范例

 

    假设在web service中定义了一个数据查询的方法:

 

 

[WebMethod]

   public DataSet ExecuteQuery(string SQL)

        {

            using (OracleConnection conn = new OracleConnection(connstrSQL))

            {

                try

                {

                    conn.Open();

 

                    OracleCommand cmd = new OracleCommand(sql,conn);

 

                    OracleDataAdapter ada = new OracleDataAdapter(cmd);

                    DataSet ds = new DataSet();

                    ada.Fill(ds);

 

                    return ds;

                }

                catch (OracleException ex)

                {

                    throw new Exception(ex.Message);

                }

                finally

                {

                    conn.Close();

                }

 

        }

    客户端:

///说明:

///panel1中放置了动态加载字样的图 片等

///   

 public partial class frmStock : Form

    {

        Service.MyService w = new Service.MyService(); //调用web service

 

        public frmStock()

        {

            InitializeComponent();

        }

 

        private void frmStock_Load(object sender, EventArgs e)

        {

            //添加异步方法执行后触发事件

            w.ExecuteQueryCompleted += new WMS.ExecuteQueryCompletedEventHandler(w_ExecuteQueryCompleted);

 

        }

 

        private void btnFind_Click(object sender, EventArgs e)

        {

            string sql = "select * from test";

 

             w.ExecuteQueryAsync(sql);  //调用对应异步方法

 

             ChangeStatus(true);

 

        }

 

        void w_ExecuteQueryCompleted(object sender, WMS.ExecuteQueryCompletedEventArgs e)

        {

DataTable dt= e.Result.Tables[0];  //获得执行结果 e

     ChangeStatus(false);

           if (dt.Rows.Count <= 0)

           {

               MessageBox.Show("没有数据", "information", MessageBoxButtons.OK, MessageBoxIcon.Information);

               return;

           }

           gvshow.AutoGenerateColumns = false;

           gvshow.DataSource = dt;

        }

        private void btnExit_Click(object sender, EventArgs e)

        {

            this.Close();

        }

        private void ChangeStatus(bool sign)

        {

            panel1.Visible = sign;

            

        }

    }

   这样,可以很好地避免了假死现象,同时使得Web Service可以提供更加友好的用户体验。想要学习更多关于异步调用Web Service的实例和相关知识的小伙伴可以观看本站的Web Service视频教程,里面有更加完善的Web Service知识等你来学!

0人推荐
共同学习,写下你的评论
0条评论
代码小兵1268
程序员代码小兵1268

11篇文章贡献53362字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消