现在开始学习Web服务,写下自己学习过程中的一些感受,拿出来与大家分享,欢迎批评指正。希望能给跟我一样初学Web服务的朋友一些帮助。
文章在我小站的地址:Web Service学习笔记:WebService特性和数组类型解析
昨天我写了前段时间的一些心得:http://www.cnblogs.com/VisualStudio/archive/2008/10/11/1308541.html,在创建Web服务时,会自动生成一段默认的代码:
[WebService(Namespace
=
"
http://tempuri.org/
"
)]
[WebServiceBinding(ConformsTo
=
WsiProfiles.BasicProfile1_1)]
[ToolboxItem(
false
)]
下面就来讲讲WebService的几个特性,虽然VS插入了一个默认的WebService特性,但是他是可选的。它包含三个属性:Description属性,Name属性和Namespace属性。
(1)Description属性
光看单词的含义就可以了解到它是一个Web服务的描述。只要在WebService特性中,设置了Description属性,那么在浏览器中就会显示出Web服务的帮助信息,它在SOAP信息中是可用的,并用此提示Web服务的使用者,能更快的理解这项服务。
(2)Name属性
当用浏览器打开Web服务时,在浏览器的标题栏会显示Web服务的名称,而Name属性则是改变服务的名称,默认情况下,Name的值是你添加的服务文件名。
(3)NameSpace属性
Web服务是一个XML的命名空间,而XML是允许在XML文档中创建名称的,每一个WebService特性必须有一个XML命名空间,只有这样才能保证它为应用程序的唯一识别。
像上面的代码,VS默认添加的是 WebService(Namespace = "http://tempuri.org/") ,一般情况下,都要使用唯一的一个名称来定义命名空间,譬如说我小站的网址(这个地址可以不是一个有效的URL)。
根据上面的解释,更改对应的属性,来看看效果,下面是我做的例子
[WebService(Description
=
"
根据学生的某些信息获取学生的相关信息
"
,Name
=
"
GetStudentInformation
"
,Namespace
=
Http:
//
www.h2bbs.com)]
在浏览器中生成,下面是效果:(左边是修改过后的效果,右边是原来的效果)

(二)数据类型
Web服务可以使用基本的数据类型,但除了这些还可以使用数据和基本类型的ArrayLists,由于Web服务是通过XML与客户端之间传递的,那么无论使用参数或者返回值。
注:使用数组的主要限制是,必须在设计的时候,你就要知道数组中元素的个数,如果元素的数量是动态的,那么就应该使用ArrayList。
ArrayList包含在System.Collection命名空间中,所以要使用它,必须引用。
我做了个例子来试验这种说法,还是用我在上一篇文章中的二维数组。
//
构造并填充info数组

string
[,] strStuInfo
=
{

{"200511020120","贰零零五届","人文法律学院","社会工作","(1)班","贺无悔","1"},

{"200511020121","贰零零五届","人文法律学院","社会工作","(1)班","贺梁需","2"},

{"200511010122","贰零零五届","人文法律学院","法律专业","(1)班","贺陆磊","3"},

{"200511010220","贰零零五届","人文法律学院","法律专业","(2)班","贺白灵","4"},

{"200511010221","贰零零五届","人文法律学院","法律专业","(2)班","李剑付","5"},

{"200511020222","贰零零五届","人文法律学院","社会工作","(2)班","李敬意","6"},

{"200511100120","贰零零五届","化工生物学院","生物制药","(1)班","李黄兴","7"},

{"200511100221","贰零零五届","化工生物学院","生物制药","(2)班","李蕾蕾","8"},

{"200511100322","贰零零五届","化工生物学院","生物制药","(3)班","杜白冰","9"},

{"200611120120","贰零零六届","化工生物学院","发酵工程","(1)班","杜书并","10"},

{"200611120121","贰零零六届","化工生物学院","发酵工程","(1)班","杜小鱼","11"},

{"200611120421","贰零零六届","化工生物学院","发酵工程","(4)班","杜声声","12"},
}
;
我想做的就是创建一个名叫GetAllStuInfo的Web方法,它的参数是字符串(学生的名字),该字符串跟二维数组中存储的学生名字进行比较(是姓还是姓名中包含的字符串,这个不考虑),服务会返回所有包含匹配字符串的所有信息。
代码如下:
[WebMethod(Description
=
"
返回查询学生名字中包含参数字符串的学生信息
"
)]
public
ArrayList GetAllStuInfo(
string
strStuName)

{
ArrayList arrAllStuInfo = new ArrayList();

//遍历数组,寻找匹配的学生姓名
for (int i = 0; i < strStuInfo.GetLength(0); i++)

{
if (strStuInfo[i, 5].IndexOf(strStuName.Trim()) >= 0)

{
arrAllStuInfo.Add(strStuInfo[i, 1].ToString() +
strStuInfo[i, 2].ToString() +
strStuInfo[i, 3].ToString() +
strStuInfo[i, 4].ToString() +
strStuInfo[i, 5].ToString());
}
}
arrAllStuInfo.Sort();
return arrAllStuInfo;
}

代码解释:
GetAllStuInfo方法首先初始化一个ArrayList,然后遍历所有的存储的学生姓名,String类的IndexOf方法在字符串中搜索,寻找匹配的字符串,如果找到一个匹配,它会返回第一个匹配项的索引。如果没有找到,则会返回-1.如上图,为什么返回给客户端的结果跟数组中的顺序不同,是因为对ArrayList进行了排序。
这是我昨天晚上学习的东西,今天写写,都是些小东西,希望高手能教教我!我在这先谢谢了!