IssueVision與TaskVision 使用技術比較
[轉]
本菜鳥目前對microsoft smartclient技術非常感興趣,最近仔細分析了microsoft編寫的issuevision和taskvision 這兩個smartclient demo,個人感覺上才開始接觸smartclient的朋友最好先分析taskvision,在有一定的基礎上在分析issuevision。這樣學習效果可能比較好。為了讓才開始接觸smartclinet的朋友少走些彎路,同時也為了與學習microsoft smartclient技術的朋友更好的進行技術交流,本菜鳥將把這幾個星期issuesvision和taskvision的學習心得與各位同行進行分享。
當客戶端呼叫xml web services時,為了安全因素,通常會要求客戶端進行身份驗證,只有通過身份驗證才有許可權呼叫xml web services 提供的方法。issuevision使用soapheader傳遞xml web services 自定義身份驗證資料。taskvision使用formsauthenticationticket的 forms 身份驗證 cookie(包含身份驗票)來獲取呼叫xml web services方法的許可權。下面將對這兩種xml web services自定義身份驗證資料的方法進行詳細的講解。
soapheader傳遞xml web services 自定義身份驗證資料
soap 標頭提供了一種方法,用於將資料傳遞到 xml web services 方法或從xml web services 方法傳遞資料,條件是該資料不直接與xml web services 方法的主功能相關。例如,一個xml web servicess 可能包含若干個xml web services 方法,而每個方法都需要自定義的身份驗證方案。您不用將引數新增到每個需要自定義身份驗證方案的xml web services 方法,而可以將引用從soapheader派生的類的 soapheaderattribute 應用於每個xml web services 方法。從soapheader派生的類的實現處理該自定義身份驗證方案。按照此方式, xml web services 方法使用 soap 標頭來僅實現特定於它的功能並新增其他功能。 issuevision 就是利用soapheader的這種能力來實現xml web services自定義身份驗證資料傳遞。
issuevision如何利用soapheader傳遞資料進行webservice自定義身份驗證資料:
1:建立從soapheader派生的類,表示傳入 soap 標頭的資料。
[issuevision解決方案中issuevisionwebcs專案的credentialsoapheader類實現]
using system.web.services.protocols;
namespace issuevision.web
{
public class credentialsoapheader : soapheader
{
private string m_username;
private string m_password;
public string username
{
get{ return m_username;}
set{ m_username = value;}
}
public string password
{
get{ return m_password;}
set{ m_password = value;}
}
}
}
2: 將credentialsoapheader類一個成員新增到實現xml web servicess 的類或 xml web servicess 客戶端代理類。
[issuevision解決方案中issuevisionwebcs專案的issuevisionservices類實現]
namespace issuevision.web
{
public class issuevisionservices : web service
{
private credentialsoapheader m_credentials
public credentialsoapheader credentials
{
get{ return m_credentials;}
set{ m_credentials = value;}
}
… …
}
}
3:將 soapheaderattribute 應用於 xml web services 方法或代理類中的對應方法
[issuevision解決方案中issuevisionwebcs專案的issuevisionservices類實現]
namespace issuevision.web
{
public class issuevisionservices : web service
{
… …
[webmethod(description="returns the lookup tables for issuevision.")]
[soapheader(“credentials”)]
public ivdataset getlookuptables()
{
securityhelper.verifycredentials(this);
return new ivdata().getlookuptables();
}
}
}
4:在客戶端程式碼中呼叫xml web services方法前,要求在代理類中設定soap標頭。
[issuevision解決方案中issuevision專案的webserviceslayer類呼叫xml web services方法並在代理類中設定soap標頭]
namespace issuevision.web
{
private static issuevisionservices getwebservicereference(string username, string password)
{
issuevisionservices dataservice = new issuevisionservices();
// credentialsoapheader header = new credentialsoapheader();
header.username = username;
header.password = password;
dataservice.credentialsoapheadervalue = header;
//
initwebserviceproxy(dataservice);
return dataservice;
}
public static ivdataset getlookuptables()
{
ivdataset data = null;
issuevisionservices dataservice = getwebservicereference();
try
{
data = dataservice.getlookuptables();
}
… …
}
}
formsauthenticationticket的 forms 身份驗證傳遞xml web services 自定義身份驗證資料
formsauthenticationticket類提供一種建立 formsauthenticationmodule 使用的 forms 身份驗證 cookie(包含身份驗票)並讀取其值的方法。taskvision就是利用formsauthenticationticket來實現xml web services自定義身份驗證資料傳遞。
taskvision如何利用formauthenticationticket傳遞資料進行webservice自定義身份驗證資料:
1:在 xml web services端將客戶端傳入引數進行驗證,驗證通過,則新增新的cache物件,並把驗證的返回值加密儲存在cache中。
[taskvision解決方案中taskvisionwscsvs專案的authservice類實現]
[webmethod()]
public string getauthorizationticket(string username, string password)
{
// try to authenticate the user
string userid;
try
{
userid = sqlhelper.executescalar(dbconn, "authenticateuser", username, password).tostring();
}
finally
{
dbconn.close();
}
if (userid == null)
{
// the user name and password combination is not valid.
return null;
}
// create the ticket
formsauthenticationticket ticket = new formsauthenticationticket(userid, false, 1);
string encryptedticket = formsauthentication.encrypt(ticket);
// get the ticket timeout in minutes
appsettingsreader configurationappsettings = new appsettingsreader();
int timeout = (int) configurationappsettings.getvalue("authenticationticket.timeout", typeof(int));
// cache the ticket
context.cache.insert(encryptedticket, userid, null, datetime.now.addminutes(timeout), timespan.zero);
return encryptedticket;
}
2:將驗證值應用於 xml web services 方法或代理類中的對應方法
[taskvision解決方案中taskvisionwscsvs專案的authservice類實現]
private bool isticketvalid(string ticket, bool isadmincall)
{
if (ticket == null || context.cache[ticket] == null)
{
return false;
}
else
{
int userid = int.parse(formsauthentication.decrypt(ticket).name);
… …
}
}
[webmethod()]
public userinformation updateuser(string ticket, userinformation userinfo)
{
if (!isticketvalid(ticket, true))
return null;
… …
}
3:客戶端程式碼中呼叫xml web services方法前,要求在代理類中設定驗證值。
namespace taskvision
{
public class datalayer
{
private string m_ticket = null;
… …
public datalayerresult getprojects()
{
datasetprojects ds;
try
{
ds = m_wsdata.getprojects(m_ticket);
… …
}
}
}
}
以上的就是issuevision與taskvision完成xml web services自定義身份驗證的兩種不同的方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-157121/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 單點登入原理與技術實現比較
- 學什麼技術比較好呢?IT技術很不錯
- XTask與RxJava的使用比較RxJava
- React與Vue模板使用比較(一、vue模板與React JSX比較)ReactVueJS
- 各大防毒軟體比較與相關防毒技術介紹(轉)防毒
- SQL Server資料匯入匯出技術概述與比較(轉)SQLServer
- SOA技術標準的比較說明
- 比較服務間通訊的技術 - ardalis
- linux防火牆實現技術比較(轉)Linux防火牆
- NLP 中不同詞嵌入技術的比較 - KDnuggets
- 室內定位技術比較及發展趨勢
- C/S、B/S軟體技術上的比較
- linux防火牆實現技術比較(1)(轉)Linux防火牆
- 技術卡片 - PHP 陣列強制轉換與 array_wrap 方法的比較PHP陣列
- 比較Apache Kafka與各大雲端計算的分散式日誌技術 - scottlogicApacheKafka分散式
- Vue與React比較VueReact
- 【Redis與Memcached比較】Redis
- RecyclerView與ListView比較View
- js與jq比較JS
- PostgreSQL與MySQL比較MySql
- Vuex與Redux比較VueRedux
- Twitter與Facebook使用者增長比較
- 分散式計算技術的比較:Jini, Jxta and Web Services分散式Web
- 三種主流虛擬化技術的比較(Vmware/Citrix/Microsoft)ROS
- 五種VC++資料庫開發技術的比較C++資料庫
- Flutter 與 iOS 功能比較FlutteriOS
- Flutter與Swift比較 - evroneFlutterSwiftVR
- Hibernate與mybatis比較MyBatis
- Python 與 Javascript 比較PythonJavaScript
- java web技術比較好的spring和hibernate書籍JavaWebSpring
- 分散式計算技術比較:JXTA JINI和J2EE分散式
- 淘寶,京東,蘇寧易購技術架構(路線)分析和比較架構
- 京東首頁前端技術剖析與對比前端
- PostgreSQL與MySQL的比較 - hackrMySql
- JavaScript與WebAssembly進行比較JavaScriptWeb
- MVVM與MVC模式的比較MVVMMVC模式
- Spring Boot與Micronaut比較Spring Boot
- OpenShift與Docker全方位比較Docker