一:用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; } } }