Asp.Net知識点まとめ(五)

8653 ワード

ASP.NET高度な構成
Cacheキャッシュメカニズム
キャッシュのパラメータ:最初はキャッシュのプライマリ・キーです.2人目はキャッシュの値です.3つ目はキャッシュの依存項目です.4番目はキャッシュが除去された時間です.5つ目はキャッシュ時間の間隔です
一般キャッシュの設定
//this.Cache.Insert(“w”, DateTime.Now.ToLongTimeString(), null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);

スライドキャッシュの設定
//this.Cache.Insert(“w”,DateTime.Now.ToLocalTime(),null,DateTime.MaxValue,new TimeSpan(0,0,5));

キャッシュ依存ファイル
//this.Cache.Insert(“w”, DateTime.Now.ToLocalTime(), new CacheDependency(Server.MapPath(“a.html”)));

データベースのキャッシュ
// this.Cache.Insert(“w”,DateTime.Now.ToLocalTime(),new SqlCacheDependency(“web.config            ”,”          ”));

キャッシュ・データベースの構成
データベース・キャッシュ依存
Sサーバ名-E統合認証-ed起動-dデータベース名-etバッファ依存テーブル名-tテーブル名**を指定
vs 2010のコマンドプロンプトで実行(aspnet_regsql.exeが存在するディレクトリに切り替える)
aspnet_regsql -S . -E -ed -d HKCorpData -et -t HKSJ_USERS

キャッシュ依存データベースの無効化
aspnet_regsql -S . -E -dd -d HKCorpData

web.configプロファイルは次のとおりです.
接続文字列の名前
/* 





*/

セッション使用
/*stateServer             */

1.プロセス内での使用

session[”key”]=”value”;
object obj=session[”key”];


2.プロセス外使用
Webを構成します.configファイル:


リモートstateserver構成レジストリの場合
コマンド:cmd→regedit.exe HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection
3.データベース・サーバでの使用
aspnet_regsql.exe -S 127.0.0.1 -U sa -P 123 -ssadd -sstype c -d SessionTest


グローバルファイルの使用
グローバルファイルの紹介:
//   iis          ,         
protected void Application_Start(object sender, EventArgs e)
{
//          ,       ,          :
Application[”isbackground”] = “bluk”;
//                  Application[”isbackground”]
//       
Application[”number”] = 0;
}
//               
protected void Session_Start(object sender, EventArgs e)
{
//                   
lock (Session[”Id”])
    {
//      
Session[”Id”] = (int)Session[”Id”] + 1;
//      
Application[”number”] = (int)Application[”number”] + 1;
    }
}
//     iis              ,      
protected void Application_BeginRequest(object sender, EventArgs e)
{
//              :     
if (Request.RawUrl.Contains(“images/”))
{
if (Request.UrlReferrer == null || !IsSameDomain(Request.UrlReferrer, Request.Url))
    {
Response.ContentType = “image/jpeg”;
string path = Request.MapPath(“~/daolian.jpg”);
Response.WriteFile(path);
//    
Response.End();
     }
}
}
//          
public bool IsSameDomain(Uri u1, Uri u2)
{
return Uri.Compare(u1, u2, UriComponents.HostAndPort, UriFormat.SafeUnescaped, StringComparison.CurrentCultureIgnoreCase) == 0 ? true : false;
}
//         ,    ,         
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
//          
//         
HttpClientCertificate hr = new HttpClientCertificate();
hr=  Context.Request.ClientCertificate;
//         
string str=  Request.UserHostAddress;
}
//          
protected void Application_Error(object sender, EventArgs e)
{
//                       
Response.Redirect(Server.MapPath(“a.html”));
}
//                    
protected void Session_End(object sender, EventArgs e)
{
lock (Session[”Id”])
    {
if ((int)Session[”Id”] > 0)
        {
Session[”Id”] = (int)Session[”Id”] - 1;
        }
    }
}
//              
protected void Application_End(object sender, EventArgs e)
{
//                 
//             
File.WriteAllText(“log.txt”, Application[”number”].ToString());
}

同時に、パイプ内のイベントもここに登録できます.以下は、パイプ内の公開済みの19のイベントを要求します.
(1)BeginRequest:リクエストの処理開始
(2)AuthenticateRequest認証要求、ユーザ認証情報の取得
(3):PostAuthenticateRequest取得成功
(4):AunthorizeRequest権限、一般的にユーザーが権限を取得しているかどうかを確認します.
(5):PostAuthorizeRequest:ライセンス取得
(6):ResolveRequestCache:ページキャッシュ結果の取得
(7):PostResolveRequestCache取得キャッシュ現在要求マッピングMvcHandler(pr):コントローラファクトリの作成、コントローラの作成、action実行の呼び出し、view→responseaction Handler:PR()
(8):PostMapRequestHandlerページオブジェクトの作成:現在のhttpリクエストを最終的に処理するHandlerインスタンスの作成:現在のPR HandlerをHttpContextから取得し、Create
(9):PostAcquireRequestState取得Session
(10)PostAcquireRequestState取得Session
(11)PreRequestHandlerExecute:実行ページオブジェクトの準備
ページ・オブジェクトのProcessRequestメソッドの実行
(12)PostRequestHandlerExecute実行済みページオブジェクト
(13)ReleaseRequestState解放要求状態
(14)PostReleaseRequestStateが要求状態を解放した
(15)UpdateRequestCache更新キャッシュ
(16)PostUpdateRequestCacheがキャッシュを更新しました
(17)LogRequestログ記録
(18)PostLogRequest完了ログ
(19)EndRequest完了、
IHttpModuleインタフェースの使用:
このインタフェースには2つの方法DisposeとInitがあり、Initではパイプ内の19イベントを登録することもできます.
Webを構成します.configファイル:
システムでWebノードの下での構成




//       
public void Dispose()
{}
/// 
///       ,                
/// 
///      
public void Init(HttpApplication context)
{
// :          
//          
context.BeginRequest += new EventHandler(context_BeginRequest);
}
/// 
///              
/// 
///     
///           
private void context_BeginRequest(object sender, EventArgs e)
{
// sender                
HttpApplication application = sender as HttpApplication;
application.Context.Response.Write(“      IHttpModle            ”);
}

エラー・ページの構成:
Webでconfigファイルのsystem.Web構成:




例:






url書き換え原理

void Application_BeginRequest(object sender, EventArgs e)
    {
//url  
HttpApplication app = sender as HttpApplication;
string url = app.Request.RawUrl;
/               
Regex r = new Regex(“/(\\d+)/details\\.htm",RegexOptions.IgnoreCase);
Match m = r.Match(url);
if (m.Success)
        {
string id = m.Groups[1].Value;
app.Context.RewritePath(“~/PhotoDetails.aspx?id=” + id);
        }
    }


urlRewriter
1、ノードに参加する

2、在之后加入





~/(\d{4})/(\d{2})/Default\.aspx
~/Default.aspx?ID=$1





3、に加入




データバインド:
1.Eval一方向バインド、計算式の値出力のみ
2.バインドされたデータをフォーマットしてからページに表示する
3.バインドされたデータを直接出力して何も処理しない
4.双方向バインディングは、式の値出力だけでなく、ユーザーが入力した値をデータに更新することもできます.
5.第2の方法の方法の再ロード:

’>


6.eval 2つの値を同時にバインド

’>


注意%と後の#にスペースやその他の記号は使用できません.
WebRequestクラスの使用:

PageUrl = “http://xj8c.cc “; //          
WebRequest request = WebRequest.Create(PageUrl); //WebRequest.Create  ,  WebRequest   HttpWebRequest
WebResponse response = request.GetResponse(); //WebRequest.GetResponse  ,   Internet     
Stream resStream = response.GetResponseStream(); //WebResponse.GetResponseStream  , Internet       。
Encoding enc = Encoding.GetEncoding(“GB2312”); //         utf-8 / GB2312
StreamReader sr = new StreamReader(resStream, enc); //    :System.IO。 StreamReader     TextReader (TextReader ,               ),                   。
ContentHtml.Text = sr.ReadToEnd(); //  (HTML  ),ContentHtml Multiline   TextBox  
resStream.Close();
sr.Close();