【澳门葡京备用网址】同步搭框架,ashx程序里使用异步

日记作为急忙稳定程序难点的首要手段,日志大约是有着程序都不能够不持有的一部分,上面大家就看下怎么利用log4net.dll文件:

 

Log4.Net 在Winfrom、MVC、ashx程序里的利用,ashx程序里采用异步

 

  近年来做四个双11活动的,是一套相关的H5页面。本来以为难度一点都不大,不过做下去几天只怕蒙受些难点。就计算一下呢,依旧有获得的。

1.在H5页面中,有1个遮罩层,还是挺有意思的。直接用div+css控制遮罩层页面。

 

澳门葡京备用网址 1澳门葡京备用网址 2

<!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程序中加上应用,依旧区别的,不理解的话,死活正是出不来日志文件。

下边是二种区别程序配置log4.Net的法门,注意,Winfrom和MVC,ashx的章程各异,也不能够混用。

2.log4.net
在Winfrom、MVC、ashx程序里的施用 

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

 
②在App.config中举办log4.net的连锁配置。

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

澳门葡京备用网址 3澳门葡京备用网址 4

 app.config文件

澳门葡京备用网址 5澳门葡京备用网址 6

<?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
在Winfrom、MVC、ashx程序里的应用

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

    ②在Web.config中展开log4.net的相干安排。

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

 

  澳门葡京备用网址 7澳门葡京备用网址 8

 

 4.log4.net
在Winfrom、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”)));

 

  澳门葡京备用网址 9

澳门葡京备用网址 10

 

澳门葡京备用网址 ,5.ashx主次里选择异步

  程序里用到了发短信的法力,发短信的代码是写成异步的,即async和await那种主要字。

前者调用代码:

澳门葡京备用网址 11😉

    $.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;

                } 
            });

澳门葡京备用网址 12😉

Reg.ashx代码:

澳门葡京备用网址 13😉

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

澳门葡京备用网址 14😉

前台是用ajax异步去调用一般处理程序的,本认为那样能够,但是报错。

澳门葡京备用网址 15

澳门葡京备用网址 16

缓解方式:利用HttpTaskAsyncHandler这些接口,替换掉IHttpHandler接口,复写ProcessRequestAsync方法,之后就能健康访问。

澳门葡京备用网址 17😉

    /// <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);
        }
    }

澳门葡京备用网址 18😉

 

 

 

 6.ashx程序里使用Session

     ashx程序无法直接使用Session,要想接纳,必须接二连三接口System.Web.SessionState.IRequiresSessionState,之后便能健康使用。

澳门葡京备用网址 19😉

  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;
            }
        }
    }

澳门葡京备用网址 20😉

 

参考:

  1.在C#代码中利用Log4Net(一)简单利用Log4Net

  2.asp.net
Web项目中行使Log4Net进行不当日志记录

  3.await和async在相似处理程序中的使用

  4.ashx形似处理程序中的Session读写标题

  
 5.JS+CSS简单实现DIV遮罩层彰显隐藏

转载自:

索引

1.下载log4net.dll文件

  近年来做三个双11移动的,是一套相关的H5页面。本来以为难度非常小,不过做下来几天也许遭遇些难点。就计算一下啊,照旧有得到的。

【无私分享:从入门到驾驭ASP.NET MVC】从0初阶,一起搭框架、做项目 目录索引

简述

前两日事情相比多,推延更新了,希望大家多多原谅,明天大家继续做大家的报到成效

类型准备

大家用的工具是:VS 二零一二 + SqlServer 2012 + IIS7.5

可望大家对ASP.NET
MVC有一个始发的驾驭,理论性的事物我们不做过多解释,有些地点不知晓也没提到,会用就行了,用的多了,用的久了,自然就掌握了。

类型始于

【澳门葡京备用网址】同步搭框架,ashx程序里使用异步。① 、Spring容器的配备注入

前一篇,大家新建了多少个Xml配置文件,并且大家创立了用户接口和落到实处类,今天,首先呢,我们来注入Service,大家后面在Service类库下边新建了个文件夹Config并且添加了五个放置资源ComService.xml和瑟维斯.xml。

大家事先讲过,Com呢表示大家某个通用的东西,就像是大家的通用类库叫Common,那只是个体的命名习惯,并非MVC必要大家。因为大家创立的用户表是管理员表,所以自个儿把这几个布局放到瑟维斯.xml里,我们来修改一下Service.xml

澳门葡京备用网址 21

 

 

代码:

澳门葡京备用网址 22澳门葡京备用网址 23

1 <?xml version="1.0" encoding="utf-8" ?>
2 <objects xmlns="http://www.springframework.net">
3   <description>Spring注入Service,容器指向本层层封装的接口,舍弃Dao层,减少代码量</description>
4   <!--系统管理begin-->
5   <!--用户管理-->
6   <object id="Service.User" type="Service.ServiceImp.UserManage,Service" singleton="false">
7   </object>
8   <!--系统管理end-->
9 </objects>

View Code

 

二、Log4net

作者们在此插入一段,理解一下log4net记录日志,这么些后边大家广大地方都要用到。

log4net是二个功能闻明的开源日志记录组件。利用log4net能够方便地将日志新闻记录到文件、控制台、Windows事件日志和数据库(包含MS
SQL Server, Access,
Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还足以记载控制要记载的日志级别,能够记载的日志种类包涵:FATAL(致命错误)、EXC90RO奥迪Q5(一般错误)、WA宝马7系N(警告)、INFO(一般消息)、DEBUG(调节和测试新闻)。大多数的日记记录都以记录到文件,大家器重记录到数据库,那正如便宜我们的指挥者查看日志事件。

1、安装log4net

设置情势一:

设置情势二(推荐):通过NuGet安装log4net
 命令:Install-Package log4net

澳门葡京备用网址 24

澳门葡京备用网址 25

澳门葡京备用网址 26

 

② 、在档次的次第集音信描述文件中,设置Log4net的可记录属性

澳门葡京备用网址 27

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

 

③ 、在程序根目录添加log4net的布置文件
log4net.config

澳门葡京备用网址 28

 

 

自个儿把安顿代码贴给大家:

澳门葡京备用网址 29澳门葡京备用网址 30

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <configuration>
  3   <configSections>
  4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  5   </configSections>
  6   <log4net>
  7     <root>
  8       <level value="ALL"/>
  9     </root>
 10     <logger name="dblog" additivity="false">
 11       <level value="ALL"/>
 12       <appender-ref ref="SqlServerAppender" />
 13     </logger>
 14     <!--Oracle数据库-->
 15     <appender name="OracleAppender" type="log4net.Appender.AdoNetAppender">
 16       <!-- Oracle数据源-->
 17       <connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
 18       <!-- Oracle连接字符串-->
 19       <connectionString value="DATA SOURCE=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.206)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));PASSWORD=watdb;PERSIST SECURITY INFO=True;USER ID=watdb;"/>
 20       <commandText value="INSERT INTO SYS_LOG(Dates,Levels,Logger,Message,Exception,ClientUser,ClientIP,RequestUrl,Action)VALUES(:Dates,:Levels,:Logger,:Message,:Exception,:ClientUser,:ClientIP,:RequestUrl,:Action)"/>
 21       <!--  
 22              设置缓存区大小  
 23              1表明有一条日志就要写入  
 24              如果10就表示日志到达10条时一起写入  
 25              -->
 26       <bufferSize value="0"/>
 27       <parameter>
 28         <parameterName value=":Dates" />
 29         <dbType value="DateTime" />
 30         <layout type="log4net.Layout.RawTimeStampLayout"/>
 31       </parameter>
 32       <parameter>
 33         <parameterName value=":Levels" />
 34         <dbType value="String" />
 35         <size value="50" />
 36         <layout type="log4net.Layout.PatternLayout">
 37           <conversionPattern value="%level" />
 38         </layout>
 39       </parameter>
 40       <parameter>
 41         <parameterName value=":Logger" />
 42         <dbType value="String" />
 43         <size value="200" />
 44         <layout type="log4net.Layout.PatternLayout">
 45           <conversionPattern value="%logger" />
 46         </layout>
 47       </parameter>
 48       <parameter>
 49         <parameterName value=":Message" />
 50         <dbType value="String" />
 51         <size value="4000" />
 52         <layout type="log4net.Layout.PatternLayout">
 53           <conversionPattern value="%message" />
 54         </layout>
 55       </parameter>
 56       <parameter>
 57         <parameterName value=":Exception" />
 58         <dbType value="String" />
 59         <size value="4000" />
 60         <layout type="log4net.Layout.PatternLayout">
 61           <conversionPattern value="%exception" />
 62         </layout>
 63       </parameter>
 64       <!--DIY-->
 65       <parameter>
 66         <parameterName value=":ClientUser" />
 67         <dbType value="String" />
 68         <size value="100" />
 69         <layout type="log4net.Layout.PatternLayout">
 70           <conversionPattern value="%property{ClientUser}" />
 71         </layout>
 72       </parameter>
 73       <parameter>
 74         <parameterName value=":ClientIP" />
 75         <dbType value="String" />
 76         <size value="20" />
 77         <layout type="log4net.Layout.PatternLayout">
 78           <conversionPattern value="%property{ClientIP}" />
 79         </layout>
 80       </parameter>
 81       <parameter>
 82         <parameterName value=":RequestUrl" />
 83         <dbType value="String" />
 84         <size value="500" />
 85         <layout type="log4net.Layout.PatternLayout">
 86           <conversionPattern value="%property{RequestUrl}" />
 87         </layout>
 88       </parameter>
 89       <parameter>
 90         <parameterName value=":Action" />
 91         <dbType value="String" />
 92         <size value="20" />
 93         <layout type="log4net.Layout.PatternLayout">
 94           <conversionPattern value="%property{Action}" />
 95         </layout>
 96       </parameter>
 97     </appender>
 98     <!--Sqlite数据库-->
 99     <appender name="SqliteAppender" type="log4net.Appender.AdoNetAppender">
100       <bufferSize value="0" />
101       <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.98.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
102       <connectionString value="Data Source=|DataDirectory|test.db;Version=3;" />
103       <commandText value="INSERT INTO Log (Date, Level, Logger, ClientUser,ClientIP, RequestUrl,Action, Message, Exception) VALUES (@Date, @Level, @Logger,@ClientUser,@ClientIP, @RequestUrl,@Action, @Message, @Exception)" />
104       <parameter>
105         <parameterName value="@Date" />
106         <dbType value="DateTime" />
107         <layout type="log4net.Layout.RawTimeStampLayout" />
108       </parameter>
109       <parameter>
110         <parameterName value="@Level" />
111         <dbType value="String" />
112         <layout type="log4net.Layout.PatternLayout">
113           <conversionPattern value="%level" />
114         </layout>
115       </parameter>
116       <parameter>
117         <parameterName value="@Logger" />
118         <dbType value="String" />
119         <layout type="log4net.Layout.PatternLayout">
120           <conversionPattern value="%logger" />
121         </layout>
122       </parameter>
123       <parameter>
124         <parameterName value="@ClientUser" />
125         <dbType value="String" />
126         <layout type="log4net.Layout.PatternLayout">
127           <conversionPattern value="%property{ClientUser}" />
128         </layout>
129       </parameter>
130       <parameter>
131         <parameterName value="@ClientIP" />
132         <dbType value="String" />
133         <layout type="log4net.Layout.PatternLayout">
134           <conversionPattern value="%property{ClientIP}" />
135         </layout>
136       </parameter>
137       <parameter>
138         <parameterName value="@RequestUrl" />
139         <dbType value="String" />
140         <layout type="log4net.Layout.PatternLayout">
141           <conversionPattern value="%property{RequestUrl}" />
142         </layout>
143       </parameter>
144       <parameter>
145         <parameterName value="@Action" />
146         <dbType value="String" />
147         <layout type="log4net.Layout.PatternLayout">
148           <conversionPattern value="%property{Action}" />
149         </layout>
150       </parameter>
151       <parameter>
152         <parameterName value="@Message" />
153         <dbType value="String" />
154         <layout type="log4net.Layout.PatternLayout">
155           <conversionPattern value="%message" />
156         </layout>
157       </parameter>
158       <parameter>
159         <parameterName value="@Exception" />
160         <dbType value="String" />
161         <layout type="log4net.Layout.PatternLayout">
162           <conversionPattern value="%exception" />
163         </layout>
164       </parameter>
165     </appender>
166     <!--SqlServer数据库-->
167     <appender name="SqlServerAppender" type="log4net.Appender.AdoNetAppender">
168       <!-- SqlServer数据源-->
169       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
170       <!-- SqlServer连接字符串-->
171       <connectionString value="data source=.;initial catalog=wkmvc_db;integrated security=false;persist security info=True;User ID=sa_wkmvc;Password=123456" />
172       <commandText value="INSERT INTO SYS_LOG(Dates,Levels,Logger,ClientUser,ClientIP,RequestUrl,Action,Message,Exception)VALUES(@Dates,@Levels,@Logger,@ClientUser,@ClientIP,@RequestUrl,@Action,@Message,@Exception)"/>
173       <!--  
174              设置缓存区大小  
175              1表明有一条日志就要写入  
176              如果10就表示日志到达10条时一起写入  
177              -->
178       <bufferSize value="0"/>
179       <parameter>
180         <parameterName value="@Dates" />
181         <dbType value="DateTime" />
182         <layout type="log4net.Layout.RawTimeStampLayout" />
183       </parameter>
184       <parameter>
185         <parameterName value="@Levels" />
186         <dbType value="String" />
187         <size value="50" />
188         <layout type="log4net.Layout.PatternLayout">
189           <conversionPattern value="%level" />
190         </layout>
191       </parameter>
192       <parameter>
193         <parameterName value="@Logger" />
194         <dbType value="String" />
195         <size value="255" />
196         <layout type="log4net.Layout.PatternLayout">
197           <conversionPattern value="%logger" />
198         </layout>
199       </parameter>
200       <parameter>
201         <parameterName value="@Message" />
202         <dbType value="String" />
203         <size value="4000" />
204         <layout type="log4net.Layout.PatternLayout">
205           <conversionPattern value="%message" />
206         </layout>
207       </parameter>
208       <parameter>
209         <parameterName value="@Exception" />
210         <dbType value="String" />
211         <size value="2000" />
212         <layout type="log4net.Layout.ExceptionLayout" />
213       </parameter>
214       <!--DIY-->
215       <parameter>
216         <parameterName value="@ClientUser" />
217         <dbType value="String" />
218         <size value="100" />
219         <layout type="log4net.Layout.PatternLayout" >
220           <param name="ConversionPattern" value="%property{ClientUser}"/>
221         </layout>
222       </parameter>
223       <parameter>
224         <parameterName value="@ClientIP" />
225         <dbType value="String" />
226         <size value="100" />
227         <layout type="log4net.Layout.PatternLayout" >
228           <param name="ConversionPattern" value="%property{ClientIP}"/>
229         </layout>
230       </parameter>
231       <parameter>
232         <parameterName value="@RequestUrl" />
233         <dbType value="String" />
234         <size value="500" />
235         <layout type="log4net.Layout.PatternLayout" >
236           <param name="ConversionPattern" value="%property{RequestUrl}"/>
237         </layout>
238       </parameter>
239       <parameter>
240         <parameterName value="@Action" />
241         <dbType value="String" />
242         <size value="100" />
243         <layout type="log4net.Layout.PatternLayout" >
244           <param name="ConversionPattern" value="%property{Action}"/>
245         </layout>
246       </parameter>
247     </appender>
248     <!--记录到文件-->
249     <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
250       <param name="File" value="datalog" />
251       <param name="AppendToFile" value="true" />
252       <param name="RollingStyle" value="Date" />
253       <param name="DatePattern" value="\\yyyy\\MM-dd-HH\\&quot;SQL_&quot;yyyy-MM-dd&quot;.log&quot;" />
254       <param name="StaticLogFileName" value="false" />
255       <layout type="log4net.Layout.PatternLayout,log4net">
256         <param name="ConversionPattern" value="%d - %m%n" />
257         <param name="Header" value="&#xD;&#xA;----------------------begin--------------------------&#xD;&#xA;" />
258         <param name="Footer" value="&#xD;&#xA;----------------------end--------------------------&#xD;&#xA;" />
259       </layout>
260     </appender>
261   </log4net>
262   <!--必须指定框架,否则不执行,新版本默认支持4.0,可修改源文件,项目属性设定为.NET FRAMEWORK2.0后,打开重新编译,去掉其中的.NET 4.0编译导致错误环节,如此只能使用在.net 2.0框架-->
263   <startup>
264     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
265   </startup>
266 </configuration>
267 <!--
268    调用实例
269    log4net.ILog log = log4net.LogManager.GetLogger("Filelog");
270    log.Info(Message);
271    
272     %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
273 
274     %n(new line):换行
275 
276     %d(datetime):输出当前语句运行的时刻
277 
278     %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
279 
280     %t(thread id):当前语句所在的线程ID
281 
282     %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
283 
284     %c(class):当前日志对象的名称
285     
286     %L:输出语句所在的行号
287 
288     %F:输出语句所在的文件名
289 
290     %-数字:表示该项的最小长度,如果不够,则用空格填充
291 
292     例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
293 
294     176 [main] INFO  org.foo.Bar - Located nearest gas station.
295     -->

View Code

 

④ 、下面的代码中,大家配备日志记录到了数据库的日志表 SYS_LOG

澳门葡京备用网址 31

作者们在数据库中新建这么些日志表:

 

 

数据库名:wkmvc_db

表名:SYS_LOG

 

序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 ID int 4 0     主键ID
2 DATES datetime 8 3         创建时间
3 LEVELS nvarchar 20 0         日志等级
4 LOGGER nvarchar 200 0         日志调用
5 CLIENTUSER nvarchar 100 0         使用用户
6 CLIENTIP nvarchar 20 0         访问IP
7 REQUESTURL nvarchar 500 0         访问来源
8 ACTION nvarchar 20 0         操作动作
9 MESSAGE nvarchar 4000 0         消息
10 EXCEPTION nvarchar 4000 0         异常消息

 

T-SQL:

澳门葡京备用网址 32澳门葡京备用网址 33

 1 USE [wkmvc_db]
 2 GO
 3 /****** Object:  Table [dbo].[SYS_LOG]    Script Date: 2016/5/16 9:06:19 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 CREATE TABLE [dbo].[SYS_LOG](
 9     [ID] [int] IDENTITY(1,1) NOT NULL,
10     [DATES] [datetime] NULL,
11     [LEVELS] [nvarchar](20) NULL,
12     [LOGGER] [nvarchar](200) NULL,
13     [CLIENTUSER] [nvarchar](100) NULL,
14     [CLIENTIP] [nvarchar](20) NULL,
15     [REQUESTURL] [nvarchar](500) NULL,
16     [ACTION] [nvarchar](20) NULL,
17     [MESSAGE] [nvarchar](4000) NULL,
18     [EXCEPTION] [nvarchar](4000) NULL,
19  CONSTRAINT [PK_SYS_LOG] PRIMARY KEY CLUSTERED 
20 (
21     [ID] ASC
22 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
23 ) ON [PRIMARY]
24 
25 GO
26 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'ID'
27 GO
28 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'DATES'
29 GO
30 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日志等级' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'LEVELS'
31 GO
32 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日志调用' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'LOGGER'
33 GO
34 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'使用用户' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'CLIENTUSER'
35 GO
36 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'访问IP' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'CLIENTIP'
37 GO
38 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'访问来源' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'REQUESTURL'
39 GO
40 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'操作动作' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'ACTION'
41 GO
42 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'消息' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'MESSAGE'
43 GO
44 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'异常消息' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SYS_LOG', @level2type=N'COLUMN',@level2name=N'EXCEPTION'
45 GO

View Code

 

三 、新建用户登录控制器 AccountController

在/Areas/SysManage/Controllers 下新建AccountController控制器

澳门葡京备用网址 34

 

村办习惯,大家分块控制器的代码,便于减少、管理
用#region #endregion,#region是c#预处理器指令,是一个分块预处理命令,它根本用于编辑代码的道岔,在编写翻译时会被机关删除。

澳门葡京备用网址 35

 

 

先贴一下以此代码:

澳门葡京备用网址 36澳门葡京备用网址 37

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace WebPage.Areas.SysManage.Controllers
 8 {
 9     public class AccountController : Controller
10     {
11         #region 声明容器
12         #endregion
13 
14         #region 基本视图
15         public ActionResult Index()
16         {
17             return View();
18         }
19         #endregion
20 
21         #region 帮助方法
22         #endregion
23     }
24 }

View Code

 

大家上一篇,在Config文件夹下边建立了几个xml文件,并且在Web.Config里面配备了针对性,大家在Controllers.xml里安顿一下接口的针对性

澳门葡京备用网址 38

 

 

代码:

澳门葡京备用网址 39澳门葡京备用网址 40

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <objects xmlns="http://www.springframework.net">
 3   <description>Spring注入控制器,容器指向Service层封装的接口</description>
 4   <!--系统管理 Begin-->
 5   <!--登录控制器-->
 6   <object type="WebPage.Areas.SysManage.Controllers.AccountController,WebPage" singleton="false">
 7     <property name="UserManage" ref="Service.User"/>
 8   </object>
 9   <!--系统管理 end-->
10 </objects>

View Code

 

OK,我们再回来我们的AccountController

咱俩添加一下解决方案的引用

澳门葡京备用网址 41

 

大家在注解容器里声称一下UserManage

澳门葡京备用网址 42

 

我们在大旨视图里,为Index添加1个视图:(那其间没有表明,大家不要急,大家前面逐步修改这些页面,大家先完成基本效能)

澳门葡京备用网址 43澳门葡京备用网址 44

 1 @model Domain.SYS_USER
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5     <meta charset="utf-8">
 6     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 8     <title>后台登录</title>
 9 </head>
10 <body>
11     <div >
12         <div>
13             @using (Ajax.BeginForm("login", null, new AjaxOptions()
14                         {
15                             HttpMethod = "Post",
16                             OnBegin = "dig.Loading",
17                             OnSuccess = "dig.Success",
18                             OnFailure = "dig.Failure",
19                             OnComplete = "dig.Complete"
20                         }, new { @class = "form-signin" }))
21             {
22                 @Html.AntiForgeryToken()
23                 @Html.TextBoxFor(model => model.ACCOUNT,
24                                                         new
25                                                         {
26                                                             @class = "form-control",
27                                                             @placeholder = "登录用户名",
28                                                             @maxlength = 15,
29                                                             @required = "required"
30                                                         })
31                 @Html.PasswordFor(model => model.PASSWORD,
32                                                         new
33                                                         {
34                                                             @class = "form-control",
35                                                             @placeholder = "登录密码",
36                                                             @maxlength = 12,
37                                                             @required = "required"
38                                                         })                     
39                 <button type="submit" id="login-button"></button>
40             }
41            
42         </div>
43      
44     </div>
45 
46    
47     <script type="text/javascript" src="/Content/js/jquery.min.js"></script>
48     <script type="text/javascript" src="/Content/js/jquery.unobtrusive-ajax.min.js"></script>
49     <script type="text/javascript">       
50         var dig = {
51             Loading: function () {
52                 $("#login-button").attr("disabled", "disabled");;
53             },
54             Success: function (result) {
55                 if (result.Status == "y") {
56                     alert(result.Msg)
57                 } else {
58                    alert(result.Msg);
59                     dig.Complete();
60                 }
61             },
62             Failure: function () {
63                 alert(result.Msg);
64                 dig.Complete();
65             },
66             Complete: function () {
67                 $("#login-button").attr("disabled", false);
68             },
69             ErrorMsg: function (msg) {
70                 alert(msg);
71             }
72         };
73     </script>
74 
75 </body>
76 </html>

View Code

 大家新建二个登陆验证的章程 Login

澳门葡京备用网址 45澳门葡京备用网址 46

 1         /// <summary>
 2         /// 登录验证
 3         /// add yuangang by 2016-05-16
 4         /// </summary>
 5         [ValidateAntiForgeryToken]
 6         public ActionResult Login(Domain.SYS_USER item)
 7         {
 8             var json = new JsonHelper() { Msg = "登录成功", Status = "n" };
 9             try
10             {
11                 //调用登录验证接口 返回用户实体类
12                 var users = UserManage.UserLogin(item.ACCOUNT.Trim(), item.PASSWORD.Trim());
13                 if (users != null)
14                 {
15                     //是否锁定
16                     if (users.ISCANLOGIN == 1)
17                     {
18                         json.Msg = "用户已锁定,禁止登录,请联系管理员进行解锁";
19                         return Json(json);
20                     }
21                     json.Status = "y";
22 
23                 }
24                 else
25                 {
26                     json.Msg = "用户名或密码不正确";
27                 }
28 
29             }
30             catch (Exception e)
31             {
32                 json.Msg = e.Message;
33             }
34             return Json(json, JsonRequestBehavior.AllowGet);
35         }

View Code

 

重复生成一下消除方案,我们来测试一下

澳门葡京备用网址 47

 

 

报错了~(不要担心报错,报错是我们DeBug并且梳理流程的好机遇哈~)

澳门葡京备用网址 48

 

咱俩先来切磋一下这一个荒唐:

捕捉到 System.NullReferenceException
HResult=-2147467261
Message=未将对象引用设置到对象的实例。
Source=WebPage
StackTrace:
在 WebPage.Areas.SysManage.Controllers.AccountController.Login(SYS_USER
item) 位置 e:\Visual Studio
2013\BlogDemos\wkmvc\WebPage\Areas\SysManage\Controllers\AccountController.cs:行号
37

那是哪些错误啊,错误在这一行 var users =
UserManage.UserLogin(item.ACCOUNT.Trim(), item.PASSWO凯雷德D.Trim());
那应该是UserManage
未将对象引用设置到指标的实例,我们解析,有恐怕是大家注脚的器皿出错了。

然而,大家的宣示和注入貌似没有怎么问题呀,那是怎么回事呢,大家看一下
大家Web.Config里的安排

澳门葡京备用网址 49

作者们还不曾增进Spring.net组件啊~~~

拉长一下,NetGet包 

澳门葡京备用网址 50

 

还有Common.Logging

咱俩的Spring有几个dll
分别是Spring.Core、Common.Logging、Spring.Web.Mvc(我们那里用的是Spring.Web.Mvc5)

检查一下,那多少个dll是或不是引用了

澳门葡京备用网址 51

 

于今运作一下,是还是不是要么报错呢要么为将指标设置引用到实例怎么回事呢?好像忘了些什么,仅仅只是配置配好了,spring.net的器皿还并未接管那整个……在那我们只要求让Global.asax文件的MvcApplication类继承于Spring.Web.Mvc.SpringMvcApplication类即可,依据须求override相关方就足以了

澳门葡京备用网址 52

 

 

OK!运转符合规律~~~~

澳门葡京备用网址 53

 

 

大概出现的难题:

澳门葡京备用网址 54

 

或:

澳门葡京备用网址 55

 

解决:

我们添加Microsoft.AspNet.WebApi(假诺存在就更新一下)

澳门葡京备用网址 56

 

或通过NuGet
程序包管理器控制台添加:

Install-Package Microsoft.AspNet.WebApi

Update-Package Microsoft.AspNet.WebApi -reinstall(存在)

由来:我们新建的是3个空的MVC项目,缺乏引用

 

 

四、使用Log4net

咱们添加一下log4net的类库 【C#公共扶助类】 Log4net
帮忙类

澳门葡京备用网址 57

 

小编们在AccountController控制器中扬言一下

澳门葡京备用网址 58

 

 

大家修改一下 登录验证方法Login

澳门葡京备用网址 59

 

 

代码:

澳门葡京备用网址 60澳门葡京备用网址 61

 1 using Common;
 2 using Service.IService;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Web;
 7 using System.Web.Mvc;
 8 
 9 namespace WebPage.Areas.SysManage.Controllers
10 {
11     public class AccountController : Controller
12     {
13         #region 声明容器
14         /// <summary>
15         /// 用户管理
16         /// add yuangang by 2016-05-16
17         /// </summary>
18         IUserManage UserManage { get; set; }
19         /// <summary>
20         /// 日志记录
21         /// </summary>
22         log4net.Ext.IExtLog log = log4net.Ext.ExtLogManager.GetLogger("dblog");
23         #endregion
24 
25         #region 基本视图
26         public ActionResult Index()
27         {
28             return View();
29         }
30         /// <summary>
31         /// 登录验证
32         /// add yuangang by 2016-05-16
33         /// </summary>
34         [ValidateAntiForgeryToken]
35         public ActionResult Login(Domain.SYS_USER item)
36         {
37             var json = new JsonHelper() { Msg = "登录成功", Status = "n" };
38             try
39             {
40                 //调用登录验证接口 返回用户实体类
41                 var users = UserManage.UserLogin(item.ACCOUNT.Trim(), item.PASSWORD.Trim());
42                 if (users != null)
43                 {
44                     //是否锁定
45                     if (users.ISCANLOGIN == 1)
46                     {
47                         json.Msg = "用户已锁定,禁止登录,请联系管理员进行解锁";
48                         log.Warn(Utils.GetIP(), item.ACCOUNT, Request.Url.ToString(), "Login", "系统登录,登录结果:" + json.Msg);
49                         return Json(json);
50                     }
51                     json.Status = "y";
52                     log.Info(Utils.GetIP(), item.ACCOUNT, Request.Url.ToString(), "Login", "系统登录,登录结果:" + json.Msg);
53 
54                 }
55                 else
56                 {
57                     json.Msg = "用户名或密码不正确";
58                     log.Error(Utils.GetIP(), item.ACCOUNT, Request.Url.ToString(), "Login", "系统登录,登录结果:" + json.Msg);
59                 }
60 
61             }
62             catch (Exception e)
63             {
64                 json.Msg = e.Message;
65                 log.Error(Utils.GetIP(), item.ACCOUNT, Request.Url.ToString(), "Login", "系统登录,登录结果:" + json.Msg);
66             }
67             return Json(json, JsonRequestBehavior.AllowGet);
68         }
69         #endregion
70 
71         #region 帮助方法
72         #endregion
73     }
74 }

View Code

 

今天就先写到那,下一篇,大家后续完善那个登录功用~好累~

你们先本人做一下,境遇难题百度同意,留言也好,大家消除一下。稍后自家把这一片段的德姆o
提供一下下载。

 

原创文章转发请爱惜劳动成果 http://yuangang.cnblogs.com

2.开立和谐的类型

1.在H5页面中,有三个遮罩层,依然挺有趣的。直接用div+css控制遮罩层页面。

3.在和谐项目下的引用log4net.dll文件

 

4.在app.config配置文件里丰硕配置音讯,上面贴出配置消息,大家一向复制到app.config文件下就足以了

澳门葡京备用网址 62澳门葡京备用网址 63

贴的代码

<!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>

澳门葡京备用网址 64澳门葡京备用网址 65

View Code

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <!-- 日志文件配置-->
    <root>
      <level value="ALL"/>
      <!--按文件存储日志-->
      <appender-ref ref="DebugAppender"/>
      <appender-ref ref="InfoAppender"/>
      <appender-ref ref="ErrorAppender" />
    </root>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\\Logs\\Error\\" />
      <!--日志记录的存在路-->
      <param name="AppendToFile" value="true" />
      <!--为true就表示日志会附加到文件,为false,则会重新创建一个新文件-->
      <param name="MaxSizeRollBackups" value="30" />
      <!--创建最大文件数-->
      <!--<param name="MaxFileSize" value="10240" />-->
      <!--文件大小-->
      <param name="StaticLogFileName" value="false" />
      <!--是否指定文件名-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;"/>
      <!--文件格式-->
      <param name="RollingStyle" value="Date" />
      <!--创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),Composite(按日期及文件大小),默认为Composite-->
      <layout type="log4net.Layout.PatternLayout">
        <!--输出内容布局-->
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        <!--method会影响性能-->
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\\Logs\\Info\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="30" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\\Logs\\Debug\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="30" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>
  </log4net>

 

View Code

log4.Net在那二种不一致的.net程序中加上应用,依旧分裂的,不通晓的话,死活正是出不来日志文件。

app.config全体代码

下边是二种分歧程序配置log4.Net的办法,注意,Winform和MVC,ashx的点子分歧,也不能够混用。

澳门葡京备用网址 66澳门葡京备用网址 67

2.log4.net
在Winform、MVC、ashx程序里的运用 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="SunCreate.CombatPlatform.Client.NamePipe.PipeServerProcess.set" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <log4net>
    <!-- 日志文件配置-->
    <root>
      <level value="ALL"/>
      <!--按文件存储日志-->
      <appender-ref ref="DebugAppender"/>
      <appender-ref ref="InfoAppender"/>
      <appender-ref ref="ErrorAppender" />
    </root>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\\Logs\\Error\\" />
      <!--日志记录的存在路-->
      <param name="AppendToFile" value="true" />
      <!--为true就表示日志会附加到文件,为false,则会重新创建一个新文件-->
      <param name="MaxSizeRollBackups" value="30" />
      <!--创建最大文件数-->
      <!--<param name="MaxFileSize" value="10240" />-->
      <!--文件大小-->
      <param name="StaticLogFileName" value="false" />
      <!--是否指定文件名-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;"/>
      <!--文件格式-->
      <param name="RollingStyle" value="Date" />
      <!--创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),Composite(按日期及文件大小),默认为Composite-->
      <layout type="log4net.Layout.PatternLayout">
        <!--输出内容布局-->
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        <!--method会影响性能-->
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\\Logs\\Info\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="30" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\\Logs\\Debug\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="30" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>
  </log4net>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

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

View Code

 
②在App.config中展开log4.net的连锁铺排。

5.在AssemblyInfo.cs文件下添加一句配置新闻:[assembly:
log4net.Config.XmlConfigurator(Watch = true)],如下图

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

澳门葡京备用网址 68

澳门葡京备用网址 69澳门葡京备用网址 70

6.在急需打日志的文书里引用using
log4net,然后添加Ilog变量就能够动用日志功用,如下图:

 app.config文件

 澳门葡京备用网址 71

澳门葡京备用网址 72澳门葡京备用网址 73

 

<?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

澳门葡京备用网址 74

 

 

3.log4.net
在Winform、MVC、ashx程序里的施用

 至此log4net.dll文件作者想你早已都会用了,希望对您有救助。

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

最终最终最终,首要的业务说二回,来着是客,假使你觉得好就引进或评头品足下,觉得倒霉愿意能取得你的建议,继续改正.澳门葡京备用网址 75澳门葡京备用网址 76

    ②在Web.config中实行log4.net的相干安插。

 

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

 

  澳门葡京备用网址 77澳门葡京备用网址 78

 

 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”)));

 

  澳门葡京备用网址 79

澳门葡京备用网址 80

 

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异步去调用一般处理程序的,本以为这么能够,不过报错。

澳门葡京备用网址 81

澳门葡京备用网址 82

化解方法:利用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遮罩层展现隐藏

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website