Log4.Net 在Winform、MVC、ashx程序裏的使用,ashx程序裏使用異步

 

  最近作一個雙11活動的,是一套相關的H5頁面。原本覺得難度不大,可是作下來幾天仍是遇到些問題。就總結一下吧,仍是有收穫的。javascript

1.在H5頁面中,有一個遮罩層,仍是挺有意思的。直接用div+css控制遮罩層頁面。css

 

<!DOCTYPE html >
<head>
<title>DIV CSS遮罩層</title>
<script language="javascript" type="text/javascript">
function showdiv() {            
            document.getElementById("bg").style.display ="block";
            document.getElementById("show").style.display ="block";
        }
function hidediv() {
            document.getElementById("bg").style.display ='none';
            document.getElementById("show").style.display ='none';
        }
</script>
<style type="text/css">
        #bg{ display: none;  position: absolute;  top: 0%;  left: 0%;  width: 100%;  height: 100%;  background-color: black;  z-index:1001;  -moz-opacity: 0.7;  opacity:.70;  filter: alpha(opacity=70);}
        #show{display: none;  position: absolute;  top: 25%;  left: 22%;  width: 53%;  height: 49%;  padding: 8px;  border: 8px solid #E8E9F7;  background-color: white;  z-index:1002;  overflow: auto;}
</style>
</head>
<body>
<input id="btnshow" type="button" value="Show" onclick="showdiv();"/>
<div id="bg"></div>
<div id="show">測試
<input id="btnclose" type="button" value="Close" onclick="hidediv();"/>
</div>
</body>
</html>
View Code

 

log4.Net在這三種不一樣的.net程序中添加使用,仍是不同的,不瞭解的話,死活就是出不來日誌文件。html

下面是三種不一樣程序配置log4.Net的方式,注意,Winform和MVC,ashx的方式不一樣,也不能混用。前端

2.log4.net 在Winform、MVC、ashx程序裏的使用 java

  ①在Winform中添加log.net的dll的引用。web

  ②在App.config中進行log4.net的相關配置。ajax

  ③在AssemblyInfo.cs中添加[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]json

 app.config文件session

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, 
            log4net-net-1.0"/>
  </configSections>


  <log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="LogFileAppender"/>
    </root>

    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="my_log-file.txt"/>
      <param name="AppendToFile" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt;%n - %m%n"/>
      </layout>
    </appender>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>
View Code

 

3.log4.net 在Winform、MVC、ashx程序裏的使用mvc

 ①在Mvc程序中添加log.net的dll的引用。

    ②在Web.config中進行log4.net的相關配置。

    ③在Global.asax中添加  log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("Web.config")));

 

  

 

 4.log4.net 在Winform、MVC、ashx程序裏的使用

   ashx這種類型的程序,能夠當作mvc程序,他們都是web程序,能發佈到IIS上,因此能夠把ashx程序在按mvc程序來對待。

     ①在ashx程序中添加log.net的dll的引用。

     ②在Web.config中進行log4.net的相關配置。

  ③由於默認的ashx程序裏沒有Global.asax文件,因此要先添加一個Global.asax文件。

     ④在Global.asax中添加  log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("Web.config")));

 

  

 

5.ashx程序裏使用異步

  程序裏用到了發短信的功能,發短信的代碼是寫成異步的,即async和await這種關鍵字。

前端調用代碼:

    $.ajax({
                type: 'POST',
                url: 'Reg.ashx',
                data: postDataReg,
                dataType: 'json',
                success: function (data) {
                    $("#shadow").removeClass("shadow");
                    if (data.status == "0")
                    {
                        $("#regsuccess").css('display', 'block');
                        $("#regbgein").css('display', 'none');
                    }
                    else {
                        alert(data.msg);
                    }
                    clickflag = true;

                } 
            });

Reg.ashx代碼:

public class GetUserInfoAsync : IHttpHandler
{
        public async void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            var name = await GetUserAsync();
            context.Response.Write(name);
        }
}

前臺是用ajax異步去調用通常處理程序的,本覺得這樣能夠,可是報錯。

解決方法:利用HttpTaskAsyncHandler這個接口,替換掉IHttpHandler接口,複寫ProcessRequestAsync方法,以後就能正常訪問。

    /// <summary>
    /// GetUserInfoAsync 的摘要說明
    /// </summary>
    public class GetUserInfoAsync : HttpTaskAsyncHandler
    {
        private async Task<string> GetUserAsync()
        {
            return await Task.Run(() =>
            {
                return "異步handler";
            });
        }public override async Task ProcessRequestAsync(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            var name = await GetUserAsync();
            context.Response.Write(name);
        }
    }

 

 

 

 6.ashx程序裏使用Session

     ashx程序不能直接使用Session,要想使用,必須繼承接口System.Web.SessionState.IRequiresSessionState,以後便能正常使用。

  public class Handler1 : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            string code = "codeModel";
            context.Session["codemodel"] = code; //設置session
            context.Session.Timeout = 5;    //設置session有效期5分鐘

            var codeModel = context.Session["codemodel"]; //獲取session
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

 

參考:

  1.在C#代碼中應用Log4Net(一)簡單使用Log4Net

  2.asp.net Web項目中使用Log4Net進行錯誤日誌記錄

  3.await和async在通常處理程序中的使用

  4.ashx通常處理程序中的Session讀寫問題

    5.JS+CSS簡單實現DIV遮罩層顯示隱藏

相關文章
相關標籤/搜索