這個(gè)專題主要講述的是webservice,因此這里我們的代碼以webservice相關(guān)為主,而其他工程,例如:servicegathersite,websitea等,只將簡(jiǎn)略介紹.
在vs2003中,開發(fā)一個(gè)webservice并不是件困難的事,首先,我們新建一個(gè)webservice項(xiàng)目(文件->新建->項(xiàng)目->c#->web服務(wù)應(yīng)用程序)
建完這個(gè)工程,我們將看到一個(gè)叫service1.asmx的文件,這就是webservice的標(biāo)準(zhǔn)文件,它也有ui的概念,不過我們一般不關(guān)注,因此,我們查看其cs代碼文件.如果你什么都還沒做的話,將看見一個(gè)被注釋掉的helloworld的webmethod,把注釋去掉,在運(yùn)行,你就可以得到最簡(jiǎn)單的webservice運(yùn)行實(shí)例了.點(diǎn)擊"helloworld"將執(zhí)行其方法.顯然,這個(gè)函數(shù)對(duì)我們的意義只在于宏觀的了解了下web服務(wù)的寫法.
下面,我們將開始具體介紹webservice的寫法.在代碼文件里,如果我們寫了一個(gè)函數(shù)后,希望此函數(shù)成為外部可調(diào)用的接口函數(shù),我們必須在函數(shù)上面添上一行代碼[webmethod(description="函數(shù)的描述信息")],如果你的函數(shù)沒有這個(gè)申明,它將不能被用戶引用.如:
[webmethod(description="最簡(jiǎn)單的方法")]
public string helloworld()
{
return "hello world";
}
這個(gè)函數(shù)就是外部可調(diào)用的接口函數(shù),對(duì)用戶來說相當(dāng)于一個(gè)api.如果某用戶在引用了這個(gè)服務(wù)后,他調(diào)用helloworld()方法,他就將獲得"helloworld"這個(gè)返回值.
看到這里,我們是不是發(fā)現(xiàn),其實(shí)webservice并不是那么的神秘,它也不過只是個(gè)接口,對(duì)我們而言,側(cè)重點(diǎn)依然是接口函數(shù)的編寫.下面,我將給出我們的例子所需要的接口函數(shù).
[webmethod(description="查詢以獲取需要的課件信息")]
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()) //如果執(zhí)行成功,存儲(chǔ)過程
{
cp.mydata.enforceconstraints=false; //不進(jìn)行格式嚴(yá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)名稱標(biāo)記
{
xmlelement link=xd.createelement("sitename");
link.innertext=configurationsettings.appsettings["sitename"].tostring();
roota.appendchild(link);
}
return xd;
}
else return null;
}
這是獲取資源站點(diǎn)信息的一個(gè)接口函數(shù).里面大部分的代碼,我想對(duì)于有一定asp.net基礎(chǔ)的朋友來說,都應(yīng)該是一看就明白,這里只說明下cstoreproc,這是我封裝的一個(gè)存儲(chǔ)過程類,主要功能是執(zhí)行各種類型的存儲(chǔ)過程.
細(xì)心的朋友可能會(huì)發(fā)現(xiàn)這個(gè)函數(shù)的返回類型似乎比較特殊,是個(gè)xml的文檔.我們?cè)谇懊嬉呀?jīng)說過,webservice只能傳輸序列化數(shù)據(jù),xml顯然滿足條件,但比如hash表之類的非序列化數(shù)據(jù),是不能傳輸?shù)?xml使用最為廣泛,而且考慮到跨平臺(tái)應(yīng)用,所以這里我們只以xml數(shù)據(jù)的傳輸來示例.
在下篇文章,我們將深入解析webservice的精髓---xml 數(shù)據(jù)傳輸.
新聞熱點(diǎn)
疑難解答
圖片精選