ASP.NET(99):WebService之WebMethod参数介绍
一、WebService的調(diào)試
net 2.0新建webservice為了安全考慮,默認(rèn)關(guān)閉了Post和Get方法 。
讓其打開,可在Web.config文件的<system.web>下增加(如果已經(jīng)存在就修改之)
<webServices>
<protocols>
<add name="HttpGet"/> <!--或<add name="HttpPost"/>-->
</protocols>
</webServices>
Web服務(wù)定義如下:
[WebMethod]
public int Add(int i)
{
return 33+i;
}
通過URL訪問Web服務(wù),HttpGet方式返回XML:
http://../WebServices1.asmx/Add?i=1
返回:
<?xml version="1.0"?> <int xmlsns="..">34</int>
二、WebMethod屬性:
WebMethod有6個(gè)屬性:
.Description:是對(duì)webservice方法描述的信息。就像webservice方法的功能注釋,可以讓調(diào)用者看見的注釋。.EnableSession:指示webservice否啟動(dòng)session標(biāo)志,主要通過cookie完成的,默認(rèn)false。.MessageName:主要實(shí)現(xiàn)方法重載后的重命名。.TransactionOption:指示 XML Web services 方法的事務(wù)支持。.CacheDuration:Web支持輸出高速緩存,這樣webservice就不需要執(zhí)行多遍,可以提高訪問效率,.BufferResponse:配置WebService方法是否等到響應(yīng)被完全緩沖完,才發(fā)送信息給請(qǐng)求端。普通應(yīng)用要等完全被緩沖完才被發(fā)送的!
三、EnableSession屬性
指示webservice否啟動(dòng)session標(biāo)志,主要通過cookie完成的。默認(rèn)為false。
[WebMethod(true)] //默認(rèn)參數(shù)為EnableSession
public string Login(string name)
{
Context.Session["name"] = name;
return name;
}
[WebMethod(EnableSession = true)]
public string GetName()
{
if (Context.Session["name"] != null)
return Context.Session["name"].ToString();
else
return "";
}
在客戶端,要在實(shí)例化了webservice代理類之后,要為它的CookieContainer 實(shí)例化一個(gè) new CookieContainer(),這樣才能使用session存儲(chǔ)狀態(tài)多個(gè)頁面使用。
新類繼承引用的webservice,并給CookieContainer賦值。
public class WebService1:localhost.WebService
{
private static System.Net.CookieContainer cookieContainer;
static WebService1()
{
cookieContainer = new System.Net.CookieContainer();//靜態(tài)初始化
}
public WebService1()
{
this.CookieContainer = cookieContainer;
}
}
在各個(gè)頁面使用派生的WebService類,可以獲得同一個(gè)CookieContainer :
protected void btnLogin_Click(object sender, EventArgs e)
{
WebService1 ws = new WebService1();
ws.Login(txtName.Text);
}
protected void btnGetName_Click(object sender, EventArgs e)
{
WebService1 ws = new WebService1();
lblName.Text = ws.GetName();
}
四、MessageName屬性
主要實(shí)現(xiàn)方法重載后的重命名,在Soap消息中引用時(shí),SOAP使用MessageName而非方法名。
在下面的示例中,MessageName 用于消除兩個(gè) Add 方法的歧義。
通過Add訪問的是第一個(gè)方法,而通過Add2訪問的是第二個(gè)方法!
public class Calculator : WebService {
// The MessageName property defaults to Add for this XML Web service method.
[WebMethod]
public int Add(int i, int j) {
return i + j;
}
[WebMethod(MessageName="Add2")]
public int Add(int i, int j, int k) {
return i + j + k;
}
}
訪問:http://../WebServices1.asmx/Add2?i=1
五、WebService基于SOAPHeadear實(shí)現(xiàn)安全認(rèn)證
1、首先自定義SoapHeader,需繼承自System.Web.Services.Protocols.SoapHeader
/// <summary>
///自定義的SoapHeader
/// </summary>
public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
{
public MySoapHeader()
{
}
public MySoapHeader(string userName, string passWord)
{
this.UserName = userName;
this.PassWord = passWord;
}
public string UserName {set;get;}
public string PassWord { set; get; }
}
2、添加WebService:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
//聲明Soap頭實(shí)例
public MySoapHeader myHeader = new MySoapHeader();
[System.Web.Services.Protocols.SoapHeader("myHeader")]
[WebMethod]
[SoapHeader(myHeader)]//用戶身份驗(yàn)證的SOAP頭
public string HelloWord()
{
//可以通過存儲(chǔ)在數(shù)據(jù)庫中的用戶與密碼來驗(yàn)證
if (myHeader.UserName.Equals("SoapHeader") & myHeader.PassWord.Equals("456789"))
{
return "調(diào)用服務(wù)成功!";
}
else
{
return "對(duì)不起,您沒有權(quán)限調(diào)用此服務(wù)!";
}
}
}
3、客戶端調(diào)用,設(shè)置SoapHeader;
localhost.WebService service = new localhost.WebService();
//將用戶名與密碼存入SoapHeader;
localhost.MySoapHeader header = new localhost.MySoapHeader();
header.UserName = "SoapHeader";
header.PassWord = "456789";
service.MySoapHeaderValue = header;
Console.WriteLine("設(shè)置SoapHeader:" + service.HelloWord());
//或者
Console.WriteLine("設(shè)置SoapHeader:" + service.HelloWord(header));
總結(jié)
以上是生活随笔為你收集整理的ASP.NET(99):WebService之WebMethod参数介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle存储过程+游标
- 下一篇: 英特尔发布 31.0.101.4032