日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

基于Web Services建立Asp与Asp.Net之间Session数据桥的应用研究

發(fā)布時間:2023/12/31 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Web Services建立Asp与Asp.Net之间Session数据桥的应用研究 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文的目的在于提供一種可行的解決方案通過Web Service技術(shù)來整合和管理現(xiàn)有的Asp程序到Asp.Net。 此應(yīng)用解決方案盡可能從實際出發(fā)以迭代更新方式的策略把Asp Web服務(wù)器內(nèi)存中的當(dāng)前Session更新到Asp.Net。 背景: 現(xiàn)有公司的產(chǎn)品OA是采用asp早先的技術(shù)開發(fā),需要與目前最新的asp.net產(chǎn)品進(jìn)行數(shù)據(jù)交互的應(yīng)用。現(xiàn)有的asp應(yīng)用程序往往采用“ASP sessions”,這是一種經(jīng)典的asp內(nèi)置模式,即允許數(shù)據(jù)臨時暫存在web服務(wù)器內(nèi)存中,其最大的限制因素就是asp的session狀態(tài)是依賴具體的服務(wù)器。而另一個更寬范圍的解決方案就是很多web服務(wù)器都可能別用于根據(jù)請求而指向的任何網(wǎng)絡(luò)服務(wù)器。實際上就是所有的web服務(wù)器都像在一個農(nóng)場中,因而任何在內(nèi)存中的session狀態(tài)將不會自動跟隨請求。每個asp服務(wù)器提供自己的session狀態(tài),除非用戶很湊巧的返回統(tǒng)一服務(wù)器,造成系統(tǒng)session丟失。 通過使用服務(wù)器管理產(chǎn)品(如bigip)來強制用戶會同意服務(wù)器內(nèi)的web農(nóng)場來解決內(nèi)存中asp seesion因服務(wù)器關(guān)系而造成的問題。為了達(dá)到這個目的,采用一個cookie在客戶端工作,在服務(wù)器端來使用,讓用戶直接可以回到同一個服務(wù)器上的每個reqeust。這樣可以限制擴展性,提高可維護(hù)性,避免服務(wù)器故障的風(fēng)險(例如:session丟失服務(wù)器 失敗)。
?
????  微軟Asp.net技術(shù)的出現(xiàn)終于解決了這個問題,可以讓我們來存儲session信息到web server和database或者其他域server。不錯,問題解決了,我們還有必要用asp代碼嗎?全部扔掉?如果這樣做的話就會需要很大代價去重新使用.net來重寫asp。看來還是不可行。另一種比較好的解決方案就是用迭代方法來部分移植代碼到新的模型勝過重寫asp代碼,在這個過程中如果舊的ASP代碼和新的asp.net代碼可以有一個共同的session狀態(tài)而保持正常的工作,那么在整個生命周期中將會有益于你更好的規(guī)避風(fēng)險.以下提供了幾個解決方案從此略上來解決當(dāng)采用經(jīng)典的asp sesssion因服務(wù)器關(guān)系而造成的問題。 1、用戶自定義組或者使用Asp/ADO腳本去實現(xiàn)直接讀寫用戶session數(shù)據(jù)到數(shù)據(jù)庫; 2、用戶自定義組件去直接訪問asp.net seesion數(shù)據(jù); 3、通過web servieces建立asp到asp.net的橋共享session;? 在本文中,我們將討論最后一種方案,其中也會包括一些web services與asp/ADO定制數(shù)據(jù)庫,和asp session 池的基本性能數(shù)據(jù)比較,呵呵...看完后你自己選擇用哪個。ASP to ASP.NET Bridge / Web-Service 方案 此方案中只是簡單的實現(xiàn)了一個從asp到asp.net的web services橋梁,如果你需要用數(shù)據(jù)庫,只需要進(jìn)行簡單的配置(web.congfig和aspState 數(shù)據(jù)庫)。代碼中用來獲得和設(shè)置session數(shù)據(jù)的方法寫在一個javascirpt中,該文件必須保存在本地asp程序中。 此javascirpt實現(xiàn)MSXML, http功能以便和server端交互,并負(fù)責(zé)將這些cookie回收給用戶工作站。 優(yōu)點: 支持與服務(wù)器無關(guān)的web-farm部署,提高可擴展性簡單的實現(xiàn)asp和asp.net的共同session狀態(tài)松耦合,以sessioni管理 (無連接的HTTP接口, 80端口,可防火墻等)利用久經(jīng)時間考驗的asp.net session實施。 缺點: 比asp session 內(nèi)存池實現(xiàn)和數(shù)據(jù)庫實現(xiàn)會慢。 Asp內(nèi)存共享機制: Session是采用類似字典或者哈希表的形勢保存在web server內(nèi)存中,ASP會保持session狀態(tài),提過一個特別的key給用戶,當(dāng)session會話開始時,這個key將保存cookie來紀(jì)錄客戶端發(fā)送到服務(wù)器的每一項請求,在服務(wù)器端,獲得cookie的key,就可以知道request對應(yīng)的session.這種機制的一個明顯的優(yōu)勢就是速度和方便,所有的session都會在一臺服務(wù)器上保存,所以很開,但是正如前面所說的,將數(shù)據(jù)保存在一臺服務(wù)器也是一個重大缺點,迫使用戶返回同一臺服務(wù)器檢索session數(shù)據(jù)。這個減少了webform的優(yōu)勢,它只是一種低成本,大淘汰的策略,如果你只想實現(xiàn)簡單功能,就可以用它。 優(yōu)點: 內(nèi)存紀(jì)錄seesion,速度快,使用標(biāo)準(zhǔn)的ASP代碼基礎(chǔ)利用久經(jīng)時間考驗的ASP session實施。 缺點: 它承載的能力有限,無法大規(guī)模開展網(wǎng)絡(luò)農(nóng)場(服務(wù)器依賴度高) ,服務(wù)器故障導(dǎo)致session丟失,內(nèi)存占有率太大。 Asp/ADO數(shù)據(jù)庫實現(xiàn)解決方案 建立了一個數(shù)據(jù)庫連接之間的ASP應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器。使數(shù)據(jù)被存在一個中央數(shù)據(jù)庫或者數(shù)據(jù)庫集群,然后分別從不同的服務(wù)器上的asp程序執(zhí)行。本文種只給出方案。獲取和設(shè)置session的代碼可以被放進(jìn)一個javascirpt文件中,支持基于webservices獲取的方法,允許asp取代javascirpt定制數(shù)據(jù)庫模式,直接訪問asp.netsession數(shù)據(jù)(如建立aspstate 數(shù)據(jù)庫)。 優(yōu)點: 1、支持不依賴服務(wù)器的webform部署; 2、比asp.net Web服務(wù)更快; 缺點: 1、代碼為定制執(zhí)行(比較死板); 2、比內(nèi)存共享ASP sessions 慢; 3、需要數(shù)據(jù)庫連接,從網(wǎng)絡(luò)服務(wù)器到數(shù)據(jù)庫服務(wù)器; 性能: 在下面數(shù)據(jù)中,列出了每種方案的性能比較,強調(diào)的是內(nèi)存共享aspsession池最快小型用戶可以使用,采用數(shù)據(jù)庫的話也會增加額外的開支,增加成本(除非你很有錢)。減 少網(wǎng)絡(luò)回傳,服務(wù)器請求是提高性能的唯一方法,微軟的Web應(yīng)用程序壓力工具,是用來執(zhí)行測試壓力水平的25個線程為1分鐘的時間從表中可以明顯的看出用內(nèi)存存儲aspsession比另外兩種方 式更快。 Method Get Data (ms) Set Data (ms)
?5 values 1 value 5 values 1 value
In-memory ASP Sessions 46 9 34 7
ASP/ASP.NET web service individually 4321 864 3397 679
ASP/ASP.NET web service grouped 711 142 990 198
ASP/ADO database individually 346 69 841 168
ASP/ADO database grouped 163 33 860 172 代碼描述ASP機制,在asp中創(chuàng)建sessioni 如下: Session("Sky") = "Blue";
在其他的頁面中訪問這些值采用:
var skyString = Session("Sky"); 新的API語法: 下面的語法將會代替原來的asp session 語法,目的是在橋的使用中javascript 函數(shù)可以進(jìn)行封裝
設(shè)置一個關(guān)鍵值對;
設(shè)置一個kye-value 類型session 數(shù)據(jù),語法和值錢的asp Session 語法很相似,采用下面的代碼可以把現(xiàn)有的設(shè)置asp session代碼替換; 設(shè)置sessioni數(shù)據(jù):
SetSessionValue("Sky", "Blue");
獲取 session :?
var SkyString = GetSessionValue("Sky");
這種方法建議在設(shè)置比較少的情況下用
設(shè)置多個key-valus對值
這些方法的最大開銷在于設(shè)置每一個key-value,然后返回給webservice,推薦用以下方法來設(shè)置(當(dāng)超過3對以上的key-values)
設(shè)置session
var sessionInfo = NewSession();
sessionInfo.Add(“Sky”, "Blue");
sessionInfo.Add(“Grass”, “Green”);

SetSession(sessionInfo); 獲得session
var sessionInfo = GetSession();
var skyString = sessionInfo.Item(“Sky”);
var grassString = sessionInfo.Item(“Grass”);

Java Script Example
<%@ Language="JScript" %> <script language="JScript" runat="server" src="ASPSessionWS.js" /> <%
??? var sessionInfo = NewSession();
??? sessionInfo.Item("Sky") = "Blue";
??? sessionInfo.Item("Grass") = "Green";
??? SetSession(sessionInfo);??????????????? var retrievedSession = GetSession();
??? var sSky = retrievedSession.Item("Sky");
??? var sGrass = retrievedSession.Item("Grass"); Response.Write(sSky + "<br>");
??? Response.Write(sGrass + "<br>");
%> Visual BASIC Example
<%@ Language="VBSCRIPT" %> <script language="JScript" runat="server" src="ASPSession.js" /> <%
??? Dim sessionInfo?????????
??? Set sessionInfo = NewSession()
??? sessionInfo.Item("Sky") = "Blue"
??? sessionInfo.Item("Grass") = "Green"
??? SetSession(sessionInfo)??????????????? Dim retrievedSession
??? Set retrievedSession = GetSession()
??? Dim sSky
??? sSky = retrievedSession.Item("Sky")
??? Dim sGrass
??? sGrass = retrievedSession.Item("Grass") Response.Write(sSky & "<br>")
??? Response.Write(sGrass & "<br>")
%> Web Service 實現(xiàn)代碼 此webservice有4個簡單方法組成,它支持再asp.net sessioni中設(shè)置和獲得單獨的values,以及簡化通過裝載xml來設(shè)置 session變量的復(fù)雜度。 public string getSessionValue(string sessionVariable)
public bool setSessionValue(string sessionVariable, string sessionValue)
public string getSessionValues()
public bool setSessionValues(string xmlSessionValues)
為了讓asp.net web service能夠來支持創(chuàng)建和維護(hù)sessions,要通過下面包含在每個方法中的屬性,這將返回一個asp.net_ sessionID的cookie到響應(yīng)中可以作為使用asp Session代碼的橋。 [WebMethod(EnableSession=true)] 你也可以增加很多webservices接口來實現(xiàn)其他你想要的功能。 ASP 橋的實現(xiàn): Asp端的橋,其實就是一個依賴msxml2.serverXMLhttp COM接口為訪問web services的服務(wù)端和Scripting.Dictionary 提供一個哈希表。在當(dāng)前頁中保持一個臨時的副本session. var xmlHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP");
xmlHTTP.open("POST", sURL, false);????
var clientCookie = "" + Request.Cookies("ASP.NET_SessionId");
xmlHTTP.setRequestHeader("cookie", "ASP.NET_SessionId=" +?
? clientCookie + "; path=/;");
.
.
.
Response.Cookies("ASP.NET_SessionId") = httpCookie;
字典對象轉(zhuǎn)化
var dctSession = new ActiveXObject("Scripting.Dictionary");
var re = new RegExp("<SessionItem ", "g");
部署文件aspseesionws.js必須放在asp程序下,并且在asp.net程序中寫上如下代碼
<script language="”Jscript”" runat="”server”" src=”\Script\ASPSessionWS.js” >
</script>
采用80端口訪問web server,在腳本文件中寫如下函數(shù),用來維護(hù)session狀態(tài)
function GetWebService(Function, Parameters)
{
??? var xmlPayload = "";
??? var sURL = "http://www.xxxx.com/ASPBridge/bridge.asmx" + "/" +?
??????? Function; 總之,采用webservice 建立從遺留的asp session 到新的asp.net 的session,只要的目的是為了采用新的技術(shù)整合舊的程序,允許2個程序共享一個session內(nèi)容,雖然性能很重要,但是目前還沒有更完美的方法完全的把原有程序整合進(jìn).net。 示例下載:ASPBridge.rar (5.59 kb)

?

本文轉(zhuǎn)自?

高陽?51CTO博客,原文鏈接:http://blog.51cto.com/xiaoyinnet/196092?,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的基于Web Services建立Asp与Asp.Net之间Session数据桥的应用研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。