上篇文章介紹了些webservice的基本特性和我們例子的結構,這篇文章我們將開(kāi)始具體的代碼編寫(xiě)工作.
這個(gè)專(zhuān)題主要講述的是webservice,因此這里我們的代碼以Webservice相關(guān)為主,而其他工程,例如:ServiceGatherSite,WebSiteA等,只將簡(jiǎn)略介紹.
在VS2003中,開(kāi)發(fā)一個(gè)webservice并不是件困難的事,首先,我們新建一個(gè)webservice項目(文件->新建->項目->C#->Web服務(wù)應用程序)
建完這個(gè)工程,我們將看到一個(gè)叫Service1.asmx的文件,這就是webservice的標準文件,它也有UI的概念,不過(guò)我們一般不關(guān)注,因此,我們查看其cs代碼文件.如果你什么都還沒(méi)做的話(huà),將看見(jiàn)一個(gè)被注釋掉的helloworld的WebMethod,把注釋去掉,在運行,你就可以得到最簡(jiǎn)單的webservice運行實(shí)例了.點(diǎn)擊"helloworld"將執行其方法.顯然,這個(gè)函數對我們的意義只在于宏觀(guān)的了解了下web服務(wù)的寫(xiě)法.
下面,我們將開(kāi)始具體介紹webservice的寫(xiě)法.在代碼文件里,如果我們寫(xiě)了一個(gè)函數后,希望此函數成為外部可調用的接口函數,我們必須在函數上面添上一行代碼[WebMethod(Description="函數的描述信息")],如果你的函數沒(méi)有這個(gè)申明,它將不能被用戶(hù)引用.如:
[WebMethod(Description="最簡(jiǎn)單的方法")]
public string HelloWorld()
{
return "Hello World";
}
這個(gè)函數就是外部可調用的接口函數,對用戶(hù)來(lái)說(shuō)相當于一個(gè)API.如果某用戶(hù)在引用了這個(gè)服務(wù)后,他調用HelloWorld()方法,他就將獲得"HelloWorld"這個(gè)返回值.
看到這里,我們是不是發(fā)現,其實(shí)webservice并不是那么的神秘,它也不過(guò)只是個(gè)接口,對我們而言,側重點(diǎn)依然是接口函數的編寫(xiě).下面,我將給出我們的例子所需要的接口函數.
[WebMethod(Description="查詢(xún)以獲取需要的課件信息")]
public XmlDataDocument GetSiteAData(string AssignName)
{
XmlDataDocument xd=new XmlDataDocument(); //
DataSet ds=new DataSet();
CStoreProc cp=new CStoreProc("SearchAssign");
cp.AddParIn("@keywords",SqlDbType.VarChar,30,AssignName);
cp.AddParOut("@res",SqlDbType.Int);
if(cp.SelectProc()) //如果執行成功,存儲過(guò)程
{
cp.myData.EnforceConstraints=false; //不進(jìn)行格式嚴格檢查
if((int)cp.GetReturnValue("@res")==-1)
{
string xml="<NewDataSet></NewDataSet>";
xd.LoadXml(xml);
return xd;
}
xd=new XmlDataDocument(cp.myData);
XmlNode root1=xd.DocumentElement;
XmlNodeList roots=root1.SelectNodes("list");
foreach(XmlNode roota in roots) //為所有元素加上站點(diǎn)名稱(chēng)標記
{
XmlElement Link=xd.CreateElement("SiteName");
Link.InnerText=ConfigurationSettings.AppSettings["SiteName"].ToString();
roota.AppendChild(Link);
}
return xd;
}
else return null;
}
這是獲取資源站點(diǎn)信息的一個(gè)接口函數.里面大部分的代碼,我想對于有一定asp.net基礎的朋友來(lái)說(shuō),都應該是一看就明白,這里只說(shuō)明下CStoreProc,這是我封裝的一個(gè)存儲過(guò)程類(lèi),主要功能是執行各種類(lèi)型的存儲過(guò)程.
細心的朋友可能會(huì )發(fā)現這個(gè)函數的返回類(lèi)型似乎比較特殊,是個(gè)xml的文檔.我們在前面已經(jīng)說(shuō)過(guò),webservice只能傳輸序列化數據,xml顯然滿(mǎn)足條件,但比如hash表之類(lèi)的非序列化數據,是不能傳輸的,xml使用最為廣泛,而且考慮到跨平臺應用,所以這里我們只以xml數據的傳輸來(lái)示例.
在下篇文章,我們將深入解析webservice的精髓---xml 數據傳輸.今天不早了,早點(diǎn)睡了:)
聯(lián)系客服