WebService 服务可以返回任何可序列化的对象.本文代码给出返回基本数据类型及实体类结构示例和调用代码示例.
WebService代码如下:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace StudentServer { /// <summary> /// 本类实现WebService服务 /// 提供对各种数据类型的返回例子 /// 包括: /// 基本数据类型(string,ini,bool,long,float等) /// 类结构型(class),必须是可序列化的类 /// DataSet类型 /// </summary> public class Demo : System.Web.Services.WebService { public Demo() { //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的 InitializeComponent(); } #region 组件设计器生成的代码 //Web 服务设计器所必需的 private IContainer components = null; /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); } #endregion // WEB 服务示例 // HelloWorld() 示例服务返回字符串 Hello World // 若要生成,请取消注释下列行,然后保存并生成项目 // 若要测试此 Web 服务,请按 F5 键 /// <summary> /// 字符串型 /// </summary> /// <returns>Hello World</returns> [WebMethod] public string HelloWorld() { return "Hello World"; } /// <summary> /// 整型 /// </summary> /// <returns>Int</returns> [WebMethod] public int GetInt() { return 1234; } /// <summary> /// 布尔型 /// </summary> /// <returns>Bool</returns> [WebMethod] public bool GetBool() { return true; } /// <summary> /// 返回实体类 /// 必须是已序列化的类 /// </summary> /// <returns>学生类</returns> [WebMethod] public Student GetStudent() { Student stu = new Student(); stu.Name = "张三"; stu.Age = 25; stu.Sex = true; return stu; } /// <summary> /// 返回DataSet数据类型 /// </summary> /// <returns>DataSet</returns> [WebMethod] public DataSet GetDataSet() { DataSet ds = new DataSet(); return ds; } } #region 定义可序列化类 /* * 为避免Framework1.1中返回实体类报错“请求格式无法识别。” * 要在Web.Config文件中<system.web>添加以下内容: * <webServices> <protocols> <add name="HttpPost" /> <add name="HttpGet" /> </protocols> </webServices> */ //指示下面的类可序列化 /// <summary> /// 学生基本信息类 /// </summary> [Serializable] public class Student { /// <summary> /// 构造函数 /// </summary> public Student() { } private string name; /// <summary> /// 姓名 /// </summary> public string Name { get { return name; } set { name=value; } } private bool sex; /// <summary> /// 性别--布尔型变量真为女,假为男 /// </summary> public bool Sex { get { return sex; } set { sex=value; } } private int age; /// <summary> /// 年龄 /// </summary> public int Age { get { return age; } set { age=value; } } } #endregion }
调用WebService服务示例代码如下:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using StudentClient.localhost; namespace StudentClient { /// <summary> /// FrmDemo 的摘要说明。 /// </summary> public class FrmDemo : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox txtName; private System.Windows.Forms.Label label5; private System.Windows.Forms.Button btnStu; private System.Windows.Forms.Button btnInt; private System.Windows.Forms.Button btnHello; private System.Windows.Forms.Button btnDataSet; private System.Windows.Forms.Button btnBool; private System.Windows.Forms.TextBox txtSex; private System.Windows.Forms.TextBox txtAge; private System.Windows.Forms.TextBox txtOther; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public FrmDemo() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.txtName = new System.Windows.Forms.TextBox(); this.txtSex = new System.Windows.Forms.TextBox(); this.txtAge = new System.Windows.Forms.TextBox(); this.txtOther = new System.Windows.Forms.TextBox(); this.label5 = new System.Windows.Forms.Label(); this.btnStu = new System.Windows.Forms.Button(); this.btnInt = new System.Windows.Forms.Button(); this.btnHello = new System.Windows.Forms.Button(); this.btnDataSet = new System.Windows.Forms.Button(); this.btnBool = new System.Windows.Forms.Button(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(32, 40); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(48, 16); this.label1.TabIndex = 0; this.label1.Text = "姓名:"; // // label2 // this.label2.Location = new System.Drawing.Point(32, 70); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(48, 16); this.label2.TabIndex = 1; this.label2.Text = "性别:"; // // label3 // this.label3.Location = new System.Drawing.Point(136, 70); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(48, 16); this.label3.TabIndex = 2; this.label3.Text = "年龄:"; // // label4 // this.label4.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134))); this.label4.Location = new System.Drawing.Point(72, 8); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(136, 24); this.label4.TabIndex = 3; this.label4.Text = "学生基本信息"; // // txtName // this.txtName.Location = new System.Drawing.Point(80, 36); this.txtName.Name = "txtName"; this.txtName.Size = new System.Drawing.Size(144, 21); this.txtName.TabIndex = 4; this.txtName.Text = ""; // // txtSex // this.txtSex.Location = new System.Drawing.Point(80, 64); this.txtSex.Name = "txtSex"; this.txtSex.Size = new System.Drawing.Size(48, 21); this.txtSex.TabIndex = 5; this.txtSex.Text = ""; // // txtAge // this.txtAge.Location = new System.Drawing.Point(184, 64); this.txtAge.Name = "txtAge"; this.txtAge.Size = new System.Drawing.Size(40, 21); this.txtAge.TabIndex = 6; this.txtAge.Text = ""; // // txtOther // this.txtOther.Location = new System.Drawing.Point(80, 96); this.txtOther.Name = "txtOther"; this.txtOther.Size = new System.Drawing.Size(128, 21); this.txtOther.TabIndex = 7; this.txtOther.Text = ""; // // label5 // this.label5.Location = new System.Drawing.Point(32, 100); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(48, 16); this.label5.TabIndex = 8; this.label5.Text = "其它:"; // // btnStu // this.btnStu.Location = new System.Drawing.Point(8, 128); this.btnStu.Name = "btnStu"; this.btnStu.Size = new System.Drawing.Size(88, 24); this.btnStu.TabIndex = 9; this.btnStu.Text = "调用Student"; this.btnStu.Click += new System.EventHandler(this.btnStu_Click); // // btnInt // this.btnInt.Location = new System.Drawing.Point(200, 128); this.btnInt.Name = "btnInt"; this.btnInt.Size = new System.Drawing.Size(32, 24); this.btnInt.TabIndex = 10; this.btnInt.Text = "Int"; this.btnInt.Click += new System.EventHandler(this.btnInt_Click); // // btnHello // this.btnHello.Location = new System.Drawing.Point(152, 128); this.btnHello.Name = "btnHello"; this.btnHello.Size = new System.Drawing.Size(48, 24); this.btnHello.TabIndex = 11; this.btnHello.Text = "Hello"; this.btnHello.Click += new System.EventHandler(this.btnHello_Click); // // btnDataSet // this.btnDataSet.Location = new System.Drawing.Point(96, 128); this.btnDataSet.Name = "btnDataSet"; this.btnDataSet.Size = new System.Drawing.Size(56, 24); this.btnDataSet.TabIndex = 12; this.btnDataSet.Text = "DataSet"; this.btnDataSet.Click += new System.EventHandler(this.btnDataSet_Click); // // btnBool // this.btnBool.Location = new System.Drawing.Point(232, 128); this.btnBool.Name = "btnBool"; this.btnBool.Size = new System.Drawing.Size(40, 24); this.btnBool.TabIndex = 13; this.btnBool.Text = "Bool"; this.btnBool.Click += new System.EventHandler(this.btnBool_Click); // // FrmDemo // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(280, 158); this.Controls.Add(this.btnBool); this.Controls.Add(this.btnDataSet); this.Controls.Add(this.btnHello); this.Controls.Add(this.btnInt); this.Controls.Add(this.btnStu); this.Controls.Add(this.label5); this.Controls.Add(this.txtOther); this.Controls.Add(this.txtAge); this.Controls.Add(this.txtSex); this.Controls.Add(this.txtName); this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = "FrmDemo"; this.Text = "FrmDemo"; this.ResumeLayout(false); } #endregion /// <summary> /// 调用学生信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStu_Click(object sender, System.EventArgs e) { //实例化服务类 Demo dm = new Demo(); //调用返回实体类服务方法 Student stu = dm.GetStudent(); txtName.Text = stu.Name; txtSex.Text = (stu.Sex==false?"女":"男"); txtAge.Text = stu.Age.ToString(); } /// <summary> /// DataSet数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDataSet_Click(object sender, System.EventArgs e) { //实例化服务类 Demo dm = new Demo(); txtOther.Text = dm.GetDataSet().Tables.Count.ToString(); } /// <summary> /// 返回字符串 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnHello_Click(object sender, System.EventArgs e) { //实例化服务类 Demo dm = new Demo(); txtOther.Text = dm.HelloWorld(); } /// <summary> /// 返回整型 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnInt_Click(object sender, System.EventArgs e) { //实例化服务类 Demo dm = new Demo(); txtOther.Text = dm.GetInt().ToString(); } /// <summary> /// 返回布尔型 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnBool_Click(object sender, System.EventArgs e) { //实例化服务类 Demo dm = new Demo(); txtOther.Text = dm.GetBool().ToString(); } } }
窗体界面如下图: