zoukankan      html  css  js  c++  java
  • C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service

    一:用ASP.NET调用Web Service

    打开VS2010,打开“文件-新建-网站”,选择“ASP.NET网站

    选好存储位置,语言后点击确定,进入默认页面。然后先添加Web引用,把WebService引到当前的工程里面。方法是:在资源管理器中点击右键,选择添加Web 引用,(该webservice为上一篇的例子)调出对话框:

    URL中填入,前面写好的WebService运行后浏览器上面显示的地址,点击“前往”按钮,如上图,就会显示出所引用的WebService中可以调用的方法,然后点击“添加引用”,就将webservice引用到了当前的工程里面 ,如下图,解决方案中会出现引进来的WebService文件

    如果添加的是ServiceReference的服务引用,实例化服务是应该这样,如下:

            hong.Service1SoapClient login = new hong.Service1SoapClient();
                if (txtName.Text.Trim().Length == 0)
                {
                    MessageBox.Show("请输入用户名!");
                    return;
                }
                else if (pwdInfo.Password.Trim().Length == 0)
                {
                    MessageBox.Show("请输入密码!");
                    return;
                }

    我们在这就练习调用webservice的四个方法,做一个简单的调用的例子,先在网站的前台添加几个控件,代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>
    
    <!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 id="Head1" runat="server">
        <title>Webservice调用实例</title>
    </head>
    <body>
        <form id="form2" runat="server">
            <div>
                <asp:TextBox ID="Num1" runat="server"></asp:TextBox>
                <select id="selectOper" runat = "server">
                    <option>+</option>
                    <option>-</option>
                    <option>*</option>
                    <option>/</option>
                </select>
                <asp:TextBox ID="Num2" runat="server"></asp:TextBox>
                <span id = E runat = "server"></span>
                <asp:TextBox ID="Result" runat="server"></asp:TextBox>
            </div>
    </form>
    </body>
    </html>

    然后在后台写调用的代码,调用之前和使用其它的对象一样,要先实例化,实例化的方法是localhost.Service a =new localhost.Service();然后就可以通过a来访问WebService里面提供的方法了。在这个例子里面,动态的创建了一个button控件来触发WebService的调用,后台代码如下:

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication2
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
                //在页面加载的时候动态创建一个按钮,在它的事件里调用Webservice
                Button btn = new Button();
                btn.Width = 20;
                btn.Text = " = ";
                btn.Click += new EventHandler(btn_Click);
                E.Controls.Add(btn);
    
            }
    
            /// <summary>
            /// 定义动态创建Button的Click事件,在这个事件中调用Webservice
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void btn_Click(object sender, EventArgs e)
            {
                if (Num1.Text != "" && Num2.Text != "")
                {
                    //实例化引用的webservice对象
                    localhost.Service1 WebserviceInstance = new localhost.Service1();
                    int Oper = selectOper.SelectedIndex;
                    switch (Oper)
                    {
                        //通过实例化的webservice对象来调用Webservice暴露的方法
                        case 0:
                            Result.Text = WebserviceInstance.addition(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString();
                            break;
                        case 1:
                            Result.Text = WebserviceInstance.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString();
                            break;
                        case 2:
                            Result.Text = WebserviceInstance.multiplication(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString();
                            break;
                        case 3:
                            Result.Text = WebserviceInstance.division(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString();
                            break;
                    }
                }
            }
        }
    }

    运行后可以看到效果,如下图所示,在前面两个Textbox里面输入两个操作数,在中间的下拉列表中选择操作符,然后点击“=”号,将计算的结果输出到第三个Textbox里面。

    其中的报错解决

    整个计算并不是在本地进行的,是在Web服务端进行计算的然后将结果通过XML返还给了调用方的,所以,在运行该程序的时候,WebService程序还必须启动,否则会报无法连接远程服务器的异常

     二:winform程序调用Web Service

    运行效果图:

    新建一个winform项目,添加一个添加Web引用,和ASP.Net添加引用相同,使用的同样是上一篇的webservic

    e

    界面设计代码:

    namespace winform
    {
        partial class Form1
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows 窗体设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.btnCompute = new System.Windows.Forms.Button();
                this.tbNumX = new System.Windows.Forms.TextBox();
                this.tbNumY = new System.Windows.Forms.TextBox();
                this.tbResult = new System.Windows.Forms.TextBox();
                this.label2 = new System.Windows.Forms.Label();
                this.cmbWays = new System.Windows.Forms.ComboBox();
                this.SuspendLayout();
                // 
                // btnCompute
                // 
                this.btnCompute.Location = new System.Drawing.Point(212, 90);
                this.btnCompute.Name = "btnCompute";
                this.btnCompute.Size = new System.Drawing.Size(75, 23);
                this.btnCompute.TabIndex = 0;
                this.btnCompute.Text = "计算";
                this.btnCompute.UseVisualStyleBackColor = true;
                this.btnCompute.Click += new System.EventHandler(this.btnCompute_Click);
                // 
                // tbNumX
                // 
                this.tbNumX.Location = new System.Drawing.Point(41, 40);
                this.tbNumX.Name = "tbNumX";
                this.tbNumX.Size = new System.Drawing.Size(100, 21);
                this.tbNumX.TabIndex = 1;
                // 
                // tbNumY
                // 
                this.tbNumY.Location = new System.Drawing.Point(222, 39);
                this.tbNumY.Name = "tbNumY";
                this.tbNumY.Size = new System.Drawing.Size(100, 21);
                this.tbNumY.TabIndex = 2;
                // 
                // tbResult
                // 
                this.tbResult.Location = new System.Drawing.Point(349, 39);
                this.tbResult.Name = "tbResult";
                this.tbResult.Size = new System.Drawing.Size(100, 21);
                this.tbResult.TabIndex = 3;
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(330, 43);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(11, 12);
                this.label2.TabIndex = 5;
                this.label2.Text = "=";
                // 
                // cmbWays
                // 
                this.cmbWays.FormattingEnabled = true;
                this.cmbWays.Location = new System.Drawing.Point(149, 40);
                this.cmbWays.Name = "cmbWays";
                this.cmbWays.Size = new System.Drawing.Size(65, 20);
                this.cmbWays.TabIndex = 6;
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(471, 131);
                this.Controls.Add(this.cmbWays);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.tbResult);
                this.Controls.Add(this.tbNumY);
                this.Controls.Add(this.tbNumX);
                this.Controls.Add(this.btnCompute);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.Button btnCompute;
            private System.Windows.Forms.TextBox tbNumX;
            private System.Windows.Forms.TextBox tbNumY;
            private System.Windows.Forms.TextBox tbResult;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.ComboBox cmbWays;
        }
    }

    后台代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace winform
    {
        public partial class Form1 : Form
        {
            //Sign s = new Sign();
            public Form1()
            {
                InitializeComponent();
                
            }
    
            private void btnCompute_Click(object sender, EventArgs e)
            {
                if (tbNumX.Text != "" && tbNumY.Text != "")
                {
                    //实例化引用的webservice对象
                    Compute.Service1 WebserviceInstance = new Compute.Service1 ();
                    int a =Convert.ToInt32( cmbWays.SelectedItem.ToString().Trim().Substring(0,1));
                   
                    switch (a)
                    {
                        //通过实例化的webservice对象来调用Webservice暴露的方法
                        case 0:
                            tbResult.Text = WebserviceInstance.addition(double.Parse(tbNumX.Text), double.Parse(tbNumY.Text)).ToString();
                            break;
                        case 1:
                            tbResult.Text = WebserviceInstance.subtract(double.Parse(tbNumX.Text), double.Parse(tbNumY.Text)).ToString();
                            break;
                        case 2:
                            tbResult.Text = WebserviceInstance.multiplication(double.Parse(tbNumX.Text), double.Parse(tbNumY.Text)).ToString();
                            break;
                        case 3:
                            tbResult.Text = WebserviceInstance.division(double.Parse(tbNumX.Text), double.Parse(tbNumY.Text)).ToString();
                            break;
                    }
                }
            }
            //载入加减乘除的符号
            private void Form1_Load(object sender, EventArgs e)
            {
                Sign add = new Sign { Name = "+", Num = 0 };
                Sign sub = new Sign { Name = "-", Num = 1 };
                Sign mul = new Sign { Name = "*", Num = 2 };
                Sign div = new Sign { Name = "/", Num = 3 };
    
         //cmbWays.Items.Add(add);
    
                cmbWays.Items.Add(add.Num+"---> "+ add.Name);
                cmbWays.Items.Add(sub.Num + "---> " + sub.Name);
                cmbWays.Items.Add(mul.Num + "---> " + mul.Name);
                cmbWays.Items.Add(div.Num + "---> " + div.Name);
                cmbWays.SelectedItem = add.Num + "---> " + add.Name;//去掉了空格,默认选择项
    
            }
        }
    }

    自定义类:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace winform
    {
        public class Sign
        {
            public int Num { get; set; }
            public string Name { get; set; }
        }
    }

     相关的文章还有:

    winform学习日志(二十五)----------C#调用webservers实现天气预报

  • 相关阅读:
    P1171 售货员的难题--搜索(剪枝)
    逆元-P3811 【模板】乘法逆元-洛谷luogu
    gcd和exgcd和lcm
    递推
    Docker hello workd
    Docker配置文件详解
    Centos7变动
    centos7安装docker
    nginx性能调优
    nginx相关
  • 原文地址:https://www.cnblogs.com/hongmaju/p/4024053.html
Copyright © 2011-2022 走看看