最近做一个双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的方式,注意,Winform和MVC,ashx的方式不同,也不能混用。

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

  ①在Winform中添加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 在Winform、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 在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 = ; //设置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遮罩层显示隐藏

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

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

    此文章的主旨是希望过于专注.NET程序员在做好工作.写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10%-20%的时间),而不是鼓动大家什么都去学最后什么都学不精,更不是说. ...

  2. 使用 SailingEase WinForm 框架构建复合式应用程序(插件式应用程序)

    对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. Sa ...

  3. winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法

    最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...

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

     作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 前面建立的都是简单的MVC程序,现在到了吧所有事情综合在一起,以建立一个简单但真实的电子商务应用 ...

  5. Xfce4里添加登录后程序自动运行

    Xfce4里添加登录后程序自动运行 (注意该方法在登录桌面环境后才会自动运行程序. 在XUbuntu下测试过, Ubuntu下应该是类似的) 方法1: 找到这个东西, 自动添加一下 方法2: 在 .c ...

  6. MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法

    MVC+Spring.NET+NHibernate .NET SSH框架整合   在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...

  7. 从士兵到程序员再到SOHO程序员 (二)

    原文地址: http://blog.huhao.name/blog/2013/12/13/become-a-freelancer-2/ 作者:胡皓 Blog:From Soldier to Progr ...

  8. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  9. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

随机推荐

  1. C#-委托(十七)

    概述 委托(Delegate) 是存有对某个方法的引用的一种引用类型变量 委托特别用于实现事件和回调方法.所有的委托都派生自 System.Delegate 类 委托是一个类,么它就可以被定义在任何地 ...

  2. shell编程 学好内功(一)

    shell 背景 什么是shell编程 高大上的解释,往往让人摸不住头脑.一句话概括就是:shell编程就是对一堆Linux命令的逻辑化处理. 为什么要会shell编程 举个简单的例子,我们做java ...

  3. 怎么将后缀为.opt,.frm,.myd,.myi文件还原或者是导入mySQL中

    其实这个问题的解决方案很简单,把这些文件连同这些文件所在的文件夹原封不动地复制到你的 mysql 文件夹下的 data 里面 (在我的电脑里面是D:\xampp\mysql\data), 然后你进my ...

  4. MATLAB简易画图2—普通直角坐标系

    MATLAB简易画图2—普通直角坐标系 本人的MATLAB版本为: 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 继续在“MATLAB简易画图”这篇随 ...

  5. Vmware12安装centos系统详解

    vmware12安装centos7系统详解 用虚拟机12安装centos7系统详细安装过程,后附centos7下载地址. 工具/原料 虚拟机12 centos7系统镜像 方法/步骤 1 1.百度搜索c ...

  6. CF 331 E. Biologist

    CF 331 E. Biologist 题目描述 题目大意:有\(n\)个点,初始时每个点为黑色或者白色,你可以花费\(v_i\)的代价将一个点反色.然后你有许多计划,每个计划要求一个点集中的所有点为 ...

  7. 用deepin堆砌工作环境

    用deepin堆砌工作环境 这篇文章记录了我用 deepin 15.5搭建工作环境的过程,供我个人在未来重装系统时参考.对于其他以 deepin 操作系统作为主要工作平台的看官,咱们是相亲相爱的一家人 ...

  8. CSS--position:relative和position:absolute

    position:relative相对定位 1. 如何定位?每个元素在页面的普通流中会“占有”一个位置,这个位置可以理解为默认值,而相对定位就是将元素偏离元素的默认位置,但普通流中依然保持着原有的默认 ...

  9. jenkins中布置python测试

    测试代码 #coding:utf- import unittest class MyTest(unittest.TestCase): # 继承unittest.TestCase def tearDow ...

  10. DataGrid获取单元格的值

    string str = (dataGrid.Columns[0].GetCellContent(dataGrid.Items[0]) as TextBlock).Text;