您好,登錄后才能下訂單哦!
對于WebService調(diào)用,為了驗證調(diào)用者的身份,可以自定義一個SoapHeader,讓調(diào)用者將身份信息放在里面,然后在服務(wù)端檢查,具體方法如下:
1、先定義一個SoapHeader,用它來傳遞身份信息:
- using System;
- using System.Web.Services.Protocols;
- namespace CustomSoap
- {
- /// <summary>
- /// 自定義SOAP頭,從SoapHeader派生
- /// </summary>
- public class ServiceHeader : SoapHeader
- {
- /// <summary>
- /// 定義用戶名字段
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// 定義密碼字段
- /// </summary>
- public string Pass { get; set; }
- }
- }
2、WebService中的服務(wù)方法要修改一下:
- using System;
- using System.Web.Services;
- using System.Web.Services.Protocols;
- namespace CustomSoap
- {
- [WebService(Namespace = "CustomSoap.Test")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [System.ComponentModel.ToolboxItem(false)]
- public class Service : System.Web.Services.WebService
- {
- /// <summary>
- /// 定義一個ServiceHeader對象
- /// </summary>
- public ServiceHeader Header { get; set; }
- /// <summary>
- /// 服務(wù)方法,用SoapHeader標記使用哪個頭,此處是上面定義的Header屬性
- /// </summary>
- /// <returns></returns>
- [WebMethod]
- [SoapHeader("Header")]
- public string Hello()
- {
- string user = this.Header.Name;
- string pass = this.Header.Pass;
- //在此處可以進行身份判斷,這里是寫死了用戶名密碼
- if(string.Equals(user, "root") && string.Equals(pass, "pass"))
- return "Hello root";
- else
- return "Login Required";
- }
- }
- }
3、調(diào)用者要傳遞身份信息:
- public string CallHello()
- {
- //ServiceProxy是針對Service.asmx生成的代理類
- var proxy = new CustomSoap.Remote.ServiceProxy();
- //傳遞身份信息
- proxy.ServiceHeaderValue = new CustomSoap.Remote.ServiceHeader();
- proxy.ServiceHeaderValue.Name = "root";
- proxy.ServiceHeaderValue.Pass = "pass";
- //調(diào)用遠程方法
- return proxy.Hello();
- }
調(diào)用一下,應該能收到“Hello root”,如果用戶名或密碼錯誤,會收到“Login Required”。
此時的SOAP內(nèi)容會發(fā)生變化,抓一下包或者直接在瀏覽器上訪問Service.asmx?op=Hello,可以看到請求包:
- POST /Service.asmx HTTP/1.1
- Host: localhost
- Content-Type: text/xml; charset=utf-8
- Content-Length: length
- SOAPAction: "CustomSoap.Test/Hello"
- <?xml version="1.0" encoding="utf-8"?>
- <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- <!--這里多出來了Header,內(nèi)容就是我們自定義的ServiceHeader-->
- <soap:Header>
- <ServiceHeader xmlns="CustomSoap.Test">
- <Name>string</Name>
- <Pass>string</Pass>
- </ServiceHeader>
- </soap:Header>
- <!--END-->
- <soap:Body>
- <Hello xmlns="CustomSoap.Test" />
- </soap:Body>
- </soap:Envelope>
另外提一下,對于WebService,是明文的SOAP通訊,安全性上需要各位自己考慮一下方案。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。