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

  最近做一个双11活动的,是一套相关的H5页面。本来以为难度不大,但是做下来几天还是遇到些问题。就总结一下吧,还是有收获的。

1.在H5页面中,有一个遮罩层,还是挺有意思的。直接用div+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>

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)]

app.config文件

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

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

  

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

  

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遮罩层显示隐藏

时间: 2024-10-31 22:09:02

Log4.Net 在Winfrom、MVC、ashx程序里的使用,ashx程序里使用异步的相关文章

不要困在自己建造的盒子里——写给.NET程序员(附精彩评论)

转自:http://kb.cnblogs.com/page/92260/ 此文章的主旨是希望过于专注.NET程序员在做好工作.写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10%-20%的时间),而不是鼓动大家什么都去学最后什么都学不精,更不是说.NET不行或劝大家放弃.NET.恕我愚钝,此主旨在文中表达不够清楚,看评论中很多朋友误解了,特此说明. 另外,本文中的观点并不全部是我个人的想法,相当一部分来自我以前聊过天的某些大牛,他们很多来自微软.百度.腾讯等知名企业,并

【MVC 4】5.SportsSore —— 一个真实的应用程序

 作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 前面建立的都是简单的MVC程序,现在到了吧所有事情综合在一起,以建立一个简单但真实的电子商务应用程序的时候了. 在此打算建立的应用程序 — SportsStore (体育用品商店),将遵循随处可见的在线商店所采取的经典方式.将创建一个客户可以通过分类和页面进行浏览的在线产品分类,一个客户可以添加和删除商品的购物车,和一个客户能够输入其右击地址细节的结算页面.另外,还将创建一个包含创建.读取.更新和删除功

在ASP.NET程序中用程序动态向&lt;head&gt;便签里添加&lt;meta&gt;标签

在使用ASP.NET框架开发: 若要在Html网页中加入<meta>设置,但想通过程序动态加入: 1.如果是ASP.NET4.0以前版本: 使用HtmlMeta类加入<meta>设置: //首先我们应该创立HtmlMeta类实体(命名空间:System.Web.UI.HtmlControls) HtmlMeta meta1=new HtmlMeta(); meta1.Name="keyword"; meta1.Content="ASP.NET,jQue

MonoRail MVC应用(2)-构建多层结构的应用程序

习惯了分层结构的.NET开发了,当然也是分层有优势,所以在使用MonoRail进行网站构建时,首先考虑到的问题就是MonoRail如何应对分层的结构.问题1:MonoRail在WEB层没有根目录,必须有一个Views的目录MonoRail MVC没有根目录的结构,也就是只能访问一个二级目录,如http://www.pumaboyd.com/Views\/*,然后其他所有内容都在Views这个目录下面.起初我认为这是一个很严重的问题,这样的限制很约束.后来在firstyi文章介绍可以配置到根目录,

说一个MySQL里可能90%的程序员都会遇到的坑

说一个MySQL里可能90%的程序员都会遇到的坑最近我遇到了一个bug,我试着通过Rails在以"utf8"编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:Incorrect string value: '\xF0\x9F\x98\x83 <-' for column 'summary' at row 1 我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据库也是,就连要保存的这个字符串" 原文地址:https://blog.51c

StackOverflow程序员推荐:每个程序员都应读的30本书

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语.以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书.其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语.下面就按照各本书的推荐数排列. 1. <代码大全>史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,&l

展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告【转载】

走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们.01. 自己的户口档案.养老保险.医疗保险.住房公积金一定要保管好.由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期间跳来跳去,甚至是城市都换过3个.还好户口没丢掉,其他都已经是乱了,好几个城市里,

浅谈程序员的行业选择---程序人生

引言 本篇博文接着许久之前的一篇博文<浅谈程序猿的职业规划,看你如何决定自己的未来吧.>,继续探讨一下程序员行业相关的内容. 行业的选择不仅对于程序员来说非常重要,对任何一个人来说都是一样的.只不过对于程序员来说,行业更容易被忽略.从程序员每天热议的话题就能看出来,大部分的热议话题都是C#和Java哪个更牛B,或者IOS和Android哪个挣得钱多,很少看到程序员去讨论两个行业谁更有发展前景. 鉴于此,今天我们就来着重讨论一下程序员行业的选择,行业和语言一样,没有谁优谁劣,只是一种选择罢了.

程序日志--ios“页面控制”程序

</pre>交代一下我做程序的工具:mac os x虚拟机10.9.3         Xcode6         百度^-^         参考书iPhone30天精通:本程序是第13天+第14天的集合<p></p><p></p><p>这是参考书上的第13天的程序:书上的程序是为程序中的每一个视图控件页面指定一个小圆点,并使用白色的原点来显示当前页面,点击Page Control控件上面的小圆点来引导程序翻页....但是,这种翻