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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.Net零碎

發布時間:2025/4/5 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.Net零碎 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ASP.Net零碎

ServerPush

什么是ServerPush,服務器向客戶端瀏覽器“推送”,其實就是“長連接”。 只有瀏覽器請求服務器端,服務器端才有給瀏覽器響應數據,不會主動向瀏覽器推送數據,這樣是安全考慮,也是提高服務器的性能考慮。如果要服務器向瀏覽器推送數據,則需要使用ServerPush等技術模擬實現。 通過兩個頁面互相發送消息來實現,消息放到數據庫。 <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title><script src="jquery-2.1.1.js"></script><script type="text/javascript">$(function () {$("#send").click(function () {var me = $("#me").val();var tousername = $("#tousername").val();var msgs = $("#msgs").val();$.ajax({type: "post", url: "ServerPush.ashx",data: { action: "send", me: me, tousername: tousername, msgs: msgs },success: function (data) {if (data.Status =="ok" ){$("#ulMs").append($("<li>我對" + tousername + "說:" + msgs + "</li>"));$("#msgs").val("");}else {alert("發送出錯,返回報文無法識別");}},error: function () {alert("發送出錯");}})})$("#lode").click(function () {var me = $("#me").val();$.ajax({type: "post", url: "ServerPush.ashx", data: { action: "serve", me: me },success: function (data) {$("#ulMs").append($("<li>" + data.Fromsername + "我對說:" + data.Msga + "</li>"));},error: function () {alert("發送出錯");}})})})</script></head> <body>發送者:<input type="text" id="me" /><input type="button" id="lode" value="登陸" /><br />接受者<input type="text" id="tousername" />說:<input type="text" id="msgs" /><input type="button" id="send" value="發送" /><ul id="ulMs"></ul> </body>

?

//Id, Tousername, Fromusername, Msgspublic void ProcessRequest(HttpContext context){context.Response.ContentType = "application/json";string action = context.Request["action"];//判斷是接受還是發送if (action == "send"){string me = context.Request["me"];string tousername = context.Request["tousername"];string msg = context.Request["msgs"];SQLHelper.SqlEffectRow("insert into Msg(Fromusername,Tousername,Msgs) values(@FromUserName,@ToUserName,@Msg)", new SqlParameter("@FromUserName", me), new SqlParameter("@ToUserName", tousername), new SqlParameter("@Msg", msg));//新增消息context.Response.Write(new JavaScriptSerializer().Serialize(new{Status="ok"}) );}else if(action=="serve"){string me = context.Request["me"];while (true){DataTable Dt = SQLHelper.SQLDataTable("select top 1 * from Msg where Tousername=@Tousername", new SqlParameter("@Tousername", me));if (Dt.Rows.Count <= 0){Thread.Sleep(500);//休息500毫秒,減輕服務器壓力continue;}else{int id = (int)Dt.Rows[0]["Id"];string fromsername = (string)Dt.Rows[0]["Fromusername"];string msgs = (string)Dt.Rows[0]["Msgs"];SQLHelper.SqlEffectRow("delete from Msg where Id=@Id", new SqlParameter("@Id", id));//保存后刪除該條消息,避免重復var data = new { Fromsername = fromsername, Msga = msgs };string json = new JavaScriptSerializer().Serialize(data);//json context.Response.Write(json);break;}}}

?Global

Session_Start()和Session_End(),進程外Session不會觸發Session_End()。重點:Application_Start、Application_BeginRequest、Application_Error。 UrlRewrite: View.aspx?id=1→View-1.aspx 在BeginRequest中獲取請求的url( HttpContext.Current.Request.RawUrl ),生成真正的地址( Context.RewritePath ()) 靜態文件等默認是不經過asp.net引擎處理的,因此不會經過Global。 1 namespace Web1 2 { 3 public class Global : System.Web.HttpApplication 4 { 5 //自從服務器啟動起來,網站第一次被訪問的時候Application_Start執行 6 protected void Application_Start(object sender, EventArgs e) 7 { 8 File.AppendAllText("d:\\1.txt", DateTime.Now+"Application_Start\r\n"); 9 } 10 11 //Session啟動時 12 protected void Session_Start(object sender, EventArgs e) 13 { 14 File.AppendAllText("d:\\1.txt", DateTime.Now + "Session_Start\r\n"); 15 } 16 17 //當一個請求過來的時候 18 //html等靜態文件是iis直接把文件給到瀏覽器,不經過asp.net引擎的處理。 19 //所以不會調用Application_BeginRequest方法 20 protected void Application_BeginRequest(object sender, EventArgs e) 21 { 22 //即使用戶訪問一個不存在的頁面,那么Application_BeginRequest也會被調用 23 24 File.AppendAllText("d:\\1.txt", DateTime.Now + "Application_BeginRequest:"+ 25 Context.Request.RawUrl + "\r\n"); 26 //Context.RewritePath("WebExcel.html");//請求重寫在服務器內部發生 27 //File.AppendAllText("d:\\1.txt", DateTime.Now + "Context.Request.Path:" + 28 //Context.Request.Path + "\r\n"); 29 30 int? count =(int?)Application.Get("Count"); 31 if (count == null) 32 { 33 count = 1; 34 } 35 count++; 36 Application.Lock(); 37 Application.Set("Count", count); 38 Application.UnLock(); 39 40 //Url重寫:UrlRewrite。ViewPerson-1.aspx 41 Match match = Regex.Match(Context.Request.Path, @"^/ViewPerson\-(\d+)\.aspx$"); 42 if (match.Success) 43 { 44 string id = match.Groups[1].Value; 45 Context.RewritePath("/ViewPerson.aspx?id="+id); 46 } 47 } 48 49 protected void Application_AuthenticateRequest(object sender, EventArgs e) 50 { 51 52 } 53 54 //程序中發生未處理異常 55 protected void Application_Error(object sender, EventArgs e) 56 { 57 File.AppendAllText("d:\\1.txt", DateTime.Now + "Application_Error:"+ 58 Context.Error + "\r\n"); 59 } 60 61 //(*)Session過期(只有進程內Session,也就是InProc過期的時候才會調用Session_End) 62 protected void Session_End(object sender, EventArgs e) 63 { 64 File.AppendAllText("d:\\1.txt", DateTime.Now + "Session_End\r\n"); 65 } 66 67 protected void Application_End(object sender, EventArgs e) 68 { 69 File.AppendAllText("d:\\1.txt", DateTime.Now + "Application_End\r\n"); 70 } 71 } 72 } View Code

UrlRewrite

1 //當一個請求過來的時候 2 //html等靜態文件是iis直接把文件給到瀏覽器,不經過asp.net引擎的處理。 3 //所以不會調用Application_BeginRequest方法 4 protected void Application_BeginRequest(object sender, EventArgs e) 5 { 6 //即使用戶訪問一個不存在的頁面,那么Application_BeginRequest也會被調用 7 8 File.AppendAllText("d:\\1.txt", DateTime.Now + "Application_BeginRequest:"+ 9 Context.Request.RawUrl + "\r\n"); 10 //Context.RewritePath("WebExcel.html");//請求重寫在服務器內部發生 11 //File.AppendAllText("d:\\1.txt", DateTime.Now + "Context.Request.Path:" + 12 //Context.Request.Path + "\r\n"); 13 14 int? count =(int?)Application.Get("Count"); 15 if (count == null) 16 { 17 count = 1; 18 } 19 count++; 20 Application.Lock(); 21 Application.Set("Count", count); 22 Application.UnLock(); 23 24 //Url重寫:UrlRewrite。ViewPerson-1.aspx 25 Match match = Regex.Match(Context.Request.Path, @"^/ViewPerson\-(\d+)\.aspx$"); 26 if (match.Success) 27 { 28 string id = match.Groups[1].Value; 29 Context.RewritePath("/ViewPerson.aspx?id="+id); 30 } 31 }

?Application

Application是應用全局對象,被全體共享。操作之前先Lock,操作完成后UnLock。 做網站開發盡量不要用Application,也很少有需要用它的時候。

ASP.Net緩存

把數據放到Cache中,在指定的時間內,可以直接從Cache中獲取,避免對數據庫等的壓力。 設置: HttpRuntime.Cache.Insert(CacheKey, objObject,null,absoluteExpiration,slidingExpiration); 1 //Cache是全局共享的 2 DataTable dt = (DataTable)HttpRuntime.Cache["persons"]; 3 if (dt == null)//如果Cache中沒有,再去數據庫中查詢 4 //這樣可以降低數據庫服務器的壓力 5 { 6 dt = SqlHelper.ExecuteQuery("select * from T_Persons"); 7 8 //存儲緩存,30秒后過期 9 HttpRuntime.Cache.Insert("persons", dt, null, 10 DateTime.Now.AddSeconds(30), TimeSpan.Zero); 11 } 12 13 Repeater1.DataSource = dt; 14 Repeater1.DataBind();

母版頁(*)和shtml

Webform的母版頁(MasterPage),使用母版頁的窗體。母版頁太笨重。 母版頁使用ContentPlaceHolder挖坑,“使用母版頁的窗體”用Content填坑 Shtml:ServerSideInclude(SSI),主流web服務器(iis、apache等)都支持。效率高,不需要經過asp.net處理,輕量級。<!--#include file="info.htm"--> 1 <!--#include file="head.html"--> 2 正文 3 <!--#include file="foot.html"-->

?IIS配置

IIS配置文檔:

1、安裝IIS。控制面板→程序→打開關閉Windows功能,Web管理服務和萬維網服務都勾上。

2、部署網站:ASP.Net項目的發布:項目中點右鍵“發布”,選擇“文件系統”,發布到一個文件夾下。

3、在IIS中新建網站,設定域名,這樣多個域名可以放到一個IIS服務器上。需要綁定域名。

4、模擬域名,如果啟用了UAC,則用管理員權限運行記事本,打開

C:\Windows\System32\drivers\etc下的hosts文件

做一下域名協議的欺騙。偽造一些域名出來。

5、如果報錯報錯“無法識別的屬性“targetFramework”,則:

1)、把網站的應用程序池的.net framework版本改成“4.0”?

2)、C:\Windows\Microsoft.NET\Framework\v4.0.30319下用管理員權限運行( aspnet_regiis.exe -i )

6、默認文檔問題,讓用戶訪問www.web2.com的時候其實是訪問www.web2.com/index.apsx:如果用戶沒有指定要訪問哪個文件,則從上向下,匹配到誰,誰就是默認文檔。

7、MSSQL的Windows身份登錄在IIS運行的問題。IIS是以Windows服務( Windows服務的特點是:系統不登錄的時候已經在運行)的形式運行,由于Windows服務默認不是用當前用戶名運行的,那么IIS也就不是用當前用戶名運行的,那么IIS的中運行的程序也不是以當前用戶名運行的,因此asp.net程序運行所采用的用戶名不是SQLServer的管理員用戶,因此無法用“集成身份驗證”登陸SQLServer,只能用“用戶名密碼方式登陸”

轉載于:https://www.cnblogs.com/Tan-sir/p/4742250.html

總結

以上是生活随笔為你收集整理的ASP.Net零碎的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。