因为WEB服务的实现是建立在XML序列化结构的基础之上的,因此它支持相当多的数据类型。当使用SOAP协议时,按值参数和按引用参数都受支持。按引用参数可以沿两个方向发送值:向上发送到服务器和向下发送给客户端。当使用HTTP-GET和HTTP-POST将输入参数传递给XML WEB服务时,只支持一组有限的数据类型,并且他们必须是按值参数。下面这个实例演示几种数据类型的封装。
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Data.SqlClient;
namespace DataTypeService
{
/// <summary>
/// Service1 的摘要说明。
/// </summary>
public class DataTypeWS : System.Web.Services.WebService
{
public DataTypeWS()
{
//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 键
// [WebMethod]
// public string HelloWorld()
// {
// return "Hello World";
// }
[WebMethod]
public string Hello(Person p)
{
return "Hello,"+p.Name;
}
[WebMethod]
public int[] GetIntArray()
{
int[] a=new int[5];
for(int i=0;i<5;i++)
a[i]=i*10;
return a;
}
[WebMethod]
public Mode GetMode()
{
return Mode.Off;
}
[WebMethod]
public Order GetOrder()
{
Order myOrder=new Order();
myOrder.Price=34.5;
myOrder.OrderID=323232;
return myOrder;
}
[WebMethod]
public Order[] GetOrders()
{
Order[] myOrder=new Order[2];
myOrder[0]=new Order();
myOrder[0].Price=34.5;
myOrder[0].OrderID=323232;
myOrder[1]=new Order();
myOrder[1].Price=99.9;
myOrder[1].OrderID=646465;
return myOrder;
}
[WebMethod]
public DataSet GetDataSet()
{
SqlConnection myconn=new SqlConnection();
myconn.ConnectionString="data source=.;initial catalog=DATABASENAME;uid=sa;pwd=sa";
SqlCommand mycmd=new SqlCommand();
mycmd.Connection=myconn;
mycmd.CommandType=CommandType.Text;
mycmd.CommandText="select * from employee";
SqlDataAdapter adapter=new SqlDataAdapter();
adapter.SelectCommand=mycmd;
//adapter.MissingSchemaAction=MissingSchemaAction.AddWithKey;
DataSet ds=new DataSet();
adapter.Fill(ds,"employee");
return ds;
}
[WebMethod]
public XmlElement GetXmlNode()
{
XmlDocument doc=new XmlDocument();
XmlElement node;
node=doc.CreateElement("Hello");
node.InnerXml="XiaoHua";
return node;
}
}
public enum Mode
{
On=1,
Off=0
}
public struct Order
{
public int OrderID;
public double Price;
}
public class Person
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name=value;
}
}
}
}