一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Asp.net

Asp.net Web Applicatoin实现自定义HttpModule拦截异常处理

  Asp.net的NamePipe机制给我们提供了很多扩展性. 使用HttpModule我们可能实现的有: 强制站点范围的Cookie策略 集中化监控与日志 编写设置与删除HTTP头 控制response输出,如删除多余空白字符 Session管理 认证与受权   下面我们来看如何实现自定义异常处理:  

  上面的代码实现了IHttpModule接口, 实现基于HttpApplication.Error事件, 接着我们自定义输出了一些信息,包括Form,QueryString. 最后把原来的Error信息清除了,这样你看到以前那个黄页了. 这个自定义的Module可以用于调试Web应用程序使用. Web.config中配置:

  实际开发中,我们可以做的事儿很多,对这些信息记日志,发邮件. 如下, 我们演示使用Enterprise Library 做异常处理并日志记录,部分代码如下:

  注意上面的代码, 为了运行代码您需要引用以下程序集 Enterprise Library Share Common LibraryMicrosoft.Practices.ServiceLocationLogging Application BlockException Handling Application BlockException Handling Logging Provider 这里我们使用Fluent API配置, 因此没有配置XML文件. 所以不需要Web.Config中配置任何信息. 代码中有注释. 为了测试我们使用一个PAGE故意Throw 一个ArgumentNullException. 通过Server.GetLastError()获取Exception, 这时由名为MyPolicy策略处理异常. 对于ArgumentNullException把它们记录日志到名为Exception分类中,这个日志文件位于d:\\logs\\ExceptionLog.log.实际开发你完全按照你的需要来自定义策略. 然后这个日志文件中写出的内容是这样的:

由于我们日志模块我们配置还需要写Rollinglog.log文件,内容如下:

 

 

转自:http://www.cnblogs.com/wintersun/archive/2011/11/12/2246513.html

龙生   19 Feb 2013
View Details

.net网站出现:不能使用 ;文件已在使用中

  今天分析iislog 发现一堆 “不能使用 ;文件已在使用中”   fuck…. 还不少呢!Google了一下,。找到了问题所在 整站,是asp+acc 的。。。所以只给了acc的数据库权限。。数据库目录是只读的、。 解决办法 数据库目录,给webuser加上写权限。。。立刻生成了个.ldb 。。。 顺便解释下,什么是ldb ldb 文件是由共享数据库的使用者自动创建以及删除得。.LDB 文件建立并存储计算机名、用户名以及放置扩展域锁的。 .LDB 文件一般与 .MDB 同名,并且与 .MDB 文件在相同目录,在 .MDB 文件被打开时建立并锁定。 举个例子,如果你打开 c:\northwind.mdb 文件后 c:\northwind.ldb 文件会自动被建立并被锁定。 当最后一个用户关闭共享数据库时 .ldb 文件会被自动删除。但是当用户没有正常关闭数据库或者数据库已经被标记为损坏,那么 .LDB 文件不会被自动删除, 因为 .LDB 文件中存储着数据库损坏时谁正在使用该数据库。 权限问题: 记得要给予 .LDB 文件所在的文件夹一定的权限。–我就没给。。虽然可以用,但是影响了性能。。 如果你准备共享一个数据库,该 .MDB 文件应该被放置在一个用户拥有读取、写入、建立、删除权限的目录中(NTSF格式)。 即使你要求每个用户有不同的文件权限(比如,只读或者可读写),所有能够共享该数据的用户对该目录都应该拥有读取、写入、建立的权限,但是你可以分配用户对某个 .MDB 文件只拥有只读权限。 注意:如果用独占方式打开某个数据库,那么 MS JET DB 将不会建立 .LDB 文件,此时用户对目录的权限只要求有读取和写入两个权限即可。 .ldb 文件的内容: MS JET DB ENGINE 会为每个以共享方式打开数据库的使用者在 .LDB 文件中创建一个条目,每个条目的大小是 64 字节。 前面 32 字节保存计算机名,后面 32 字节保存用户名。JET DB ENGINE 支持的最大用户数是 255,因此 .LDB 文件的大小不会超过 16 KB。 当一个用户关闭一个共享数据库时,该用户在 .LDB 文件中的条目不会立即被删除,可是该条目会在下一个用户打开这个数据库时被覆盖。 这也就意味着你不能通过 .LDB 文件来唯一确定谁是某个数据库的当前使用者。 .LDB 文件的使用方法: JET DB ENGINE 使用 .LDB 文件中的信息来确定谁锁定了数据,谁正在写入被其他人锁定的数据。 如果 JET DB ENGINE 发现有其他用户的锁定冲突, 它会读取 .LDB 文件以获取计算机名与用户名谁锁定了文件或者记录。 在多数锁定冲突情况下,你会在存储记录时得到一个 “写入冲突”的提示并且取消你所做的修改。 在有些情况下你会得到如下提示: Couldn”t lock table <table name>; currently in use by user <security name> on computer <computer name>. 注意:上述关于 .LDB 文件的信息与数据库文件无关。如果一个 .LDB 文件损坏,数据库文件仍然能够工作正常。 但是写入冲突的提示消息中<security name>这个部分你可能会看见一串不知所云的文字。 参考: 在 Access 2000 中,你可以用 VBA 来输出某个数据库的所有登陆用户的信息。 关于此代码请参考: 198755 ACC2000: Checking Who Logged into Database with Jet UserRoster 转自:http://rogermmg.blog.163.com/blog/static/117472889201112343341825/  

龙生   19 Feb 2013
View Details

详解在IIS中配置并运行WCF服务

  【IT168 技术文档】WCF是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。  在IIS中运行服务     之前我们让Derivatives Calculator服务在一个.NET可执行文件中运行,在这个练习中,我们将让服务在IIS中运行。     利用IIS作为宿主程序来运行WCF服务通常有许多好处。     ·将项目构建到\bin目录中     为了方便部署,我们需要对服务项目进行配置,让它编译到一个bin目录中。     1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Properties菜单项。     2. 在Project designer中,单击Build选项卡。     3. 将Output path从bin\Debug\改为bin\,如图所示。   Project designer中经过调整的Output path属性     4. 选择File | Save All菜单项。     5. 选择File | Close菜单项来关闭Project designer。     现在,在构建服务时产生的所有文件都会被输出到\bin目录中。     ·添加一个.svc文件     为了让WCF服务能够在IIS中运行,我们需要用一种特殊的内容文件(.svc文件)表示它。这种模型和ASMX页面在IIS中的表示方法类似。.svc文件包含一个WCF专用的处理指示符(@ServiceHost),这个指示符告诉WCF运行库在收到消息时激活服务。     1. 在Solution Explorer中右键单击DerivativesCalculatorService项目并选择Add | New Item菜单项。     2. 在Add New Item对话框中,选择Text File模板。 wordend 相关阅读:     3. 在Name文本框中输入Service.svc。     4. Add New Item对话框看起来应该如图所示。   添加一个svc文件     5. 单击Add按钮。     6. 在Service.svc文件中添加下面这行语句。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/ <%@ServiceHost Service="DerivativesCalculatorService.Calculator" […]

龙生   15 Oct 2012
View Details

HTTP 错误 500.19 Internal Server Error的解决方法

以下从网络中搞定我的Win7下IIS错误:   HTTP 错误 500.19 Internal Server Error       第一种可能,能解决一部分问题   http://wenku.baidu.com/view/c5cb4a08bb68a98271fefa3f.html       第二种可能,解决另外一部分问题   经过检查发现是由于先安装vs2008后安装iis的缘故,只需重新注册下AspNet就可以了,具体步骤如下   1 打开运行,输入cmd进入到命令提示符窗口。   2 进入到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 目录。   3 输入aspnet_regiis.exe –i 执行既可   注意:如果系统为64位 第二步的路径为C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727       第三种可能解决方法: Win7下我碰到的问题   WIN7下.Net开发遇到的又一问题:HTTP 错误 500.19 – Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。   详细错误信息模块 IIS Web Core   通知 BeginRequest   处理程序 尚未确定   错误代码 0x80070021   配置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overrideMode="Deny" 或旧有的 allowOverride="false" 的位置标记明确设置的。   配置源   219: <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></modules>   220: <handlers>   221: <remove name="WebServiceHandlerFactory-Integrated"/> […]

龙生   08 Oct 2012
View Details

如何在ashx页面获取Session值

在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下: HttpRequest Request = context.Request; HttpResponse Response = context.Response; 但是要得到 Session的值就没有那么简单了。比如你要在ashx得到保存在Session中的登录帐号Session["userAccount"] 如果你只是context.Session["userAccount"]的话是会报 “未将对象引用设置到对象的实例”的异常 所以,如果要想取Session中的值 ,需要如下所示 1、引入 命名空间: using System.Web.SessionState; 2、实现IRequiresSessionState接口,具体如下 /// <summary>/// $codebehindclassname$ 的摘要说明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]public class AddUserInfo : IHttpHandler,IRequiresSessionState //就是这样显示的实现一下,不用实现什么方法{ public void ProcessRequest(HttpContext context){       //…       //这样你就可以如下 操作了 if(context.Session["userAccount"] != null)       {         string account = context.Session["userAccount"].ToString();       }       //…继续下面的代码     }   }   FROM URL:http://www.cnblogs.com/vihone/archive/2010/06/04/1751490.html

龙生   18 Sep 2012
View Details

SWFUpload V2.2.0 说明文档

SWFUpload V2.2.0 说明文档 更新时间:2008-11-07 TOC SWFUpload SWFUpload 2 概述 入门 SWFUpload JavaScript 对象 构造器 全局变量和常量 instances movieCount QUEUE_ERROR UPLOAD_ERROR FILE_STATUS Default Event Handlers BUTTON_ACTION(added in v2.2.0) BUTTON_CURSOR(added in v2.2.0) BUTTON_WINDOW_MODE(added in v2.2.0) 属性 customSettings movieName 方法 addSetting (不推荐使用) getSetting (不推荐使用) retrieveSetting (v2.1.0中已删除) destroy (v2.1.0中新增) displayDebugInfo selectFile (不推荐使用) selectFiles (不推荐使用) startUpload cancelUpload stopUpload getStats setStats getFile addPostParam removePostParam addFileParam removeFileParam setUploadURL setPostParams setFileTypes setFileSizeLimit setFileUploadLimit setFileQueueLimit setFilePostName setUseQueryString setDebugEnabled setButtonImageURL (added in v2.2.0) setButtonDimensions (added in v2.2.0) setButtonText (added in v2.2.0) setButtonTextStyle (added in v2.2.0) setButtonTextPadding (added in v2.2.0) […]

龙生   12 Sep 2012
View Details

swfupload在IE9中不显示上传按钮的问题

问题描述: 使用swfupload.js上传文件,在IE8、火狐、谷歌浏览器中显示正常,但是在IE9下不能显示上传按钮。 解决方法: 打开swfupload.js文件找到307行开始的如下代码: // Private: getFlashHTML generates the object tag needed to embed the flash in to the document SWFUpload.prototype.getFlashHTML = function (flashVersion) { // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay return ['<object id="',this.movieName, '" type="application/x-shockwave-flash" data="', (this.support.imageResize ?this.settings.flash_url : this.settings.flash9_url), '" width="', this.settings.button_width, '" height="',this.settings.button_height, '" class="swfupload">', '<param name="wmode" value="',this.settings.button_window_mode, '" />', '<param name="movie" value="', (this.support.imageResize ?this.settings.flash_url : this.settings.flash9_url), '" />', '<param name="quality" value="high" />', '<param name="allowScriptAccess" value="always" />', '<param name="flashvars" value="' +this.getFlashVars() + '" />', '</object>'].join(""); }; 将其替换为:   // Private: getFlashHTML generates the object tag […]

龙生   12 Sep 2012
View Details

Asp.net Web Applicatoin实现自定义HttpModule拦截异常处理

Asp.net的NamePipe机制给我们提供了很多扩展性. 使用HttpModule我们可能实现的有: 强制站点范围的Cookie策略 集中化监控与日志 编写设置与删除HTTP头 控制response输出,如删除多余空白字符 Session管理 认证与受权   下面我们来看如何实现自定义异常处理:  

上面的代码实现了IHttpModule接口, 实现基于HttpApplication.Error事件, 接着我们自定义输出了一些信息,包括Form,QueryString. 最后把原来的Error信息清除了,这样你看到以前那个黄页了. 这个自定义的Module可以用于调试Web应用程序使用. Web.config中配置:

实际开发中,我们可以做的事儿很多,对这些信息记日志,发邮件. 如下, 我们演示使用Enterprise Library 做异常处理并日志记录,部分代码如下:

注意上面的代码, 为了运行代码您需要引用以下程序集 Enterprise Library Share Common LibraryMicrosoft.Practices.ServiceLocationLogging Application BlockException Handling Application BlockException Handling Logging Provider 这里我们使用Fluent API配置, 因此没有配置XML文件. 所以不需要Web.Config中配置任何信息. 代码中有注释. 为了测试我们使用一个PAGE故意Throw 一个ArgumentNullException. 通过Server.GetLastError()获取Exception, 这时由名为MyPolicy策略处理异常. 对于ArgumentNullException把它们记录日志到名为Exception分类中,这个日志文件位于d:\\logs\\ExceptionLog.log.实际开发你完全按照你的需要来自定义策略. 然后这个日志文件中写出的内容是这样的:

由于我们日志模块我们配置还需要写Rollinglog.log文件,内容如下:

转自:http://www.cnblogs.com/wintersun/archive/2011/11/12/2246513.html

龙生   13 Jul 2012
View Details

asp.net向文本文件txt末尾追加内容

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls; using System.IO; public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { string Path = Server.MapPath("1.txt"); string strings = "1232222"; FileAdd(Path, strings); } public static void FileAdd(string Path, string strings) { //实现一个System.IO.StreamWrite,使其以一种特定的编码向流中写入数据,AppendText数据追加到文件末尾 //这句也可以写成StreamWriter sw = new StreamWriter(Path, true, Encoding.GetEncoding("GB2312")); StreamWriter sw = File.AppendText(Path); //开始写入 sw.WriteLine(strings); //清理当前编码器的缓冲区,并将所有缓存数据写入基础流 sw.Flush(); sw.Close(); } } 转自:http://blog.sina.com.cn/s/blog_812ce0500100ywjb.html

龙生   13 Jul 2012
View Details

ASP.NET Global.ascx 事件大全

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法。你可以使用这个文件实现应用程序安全性以及其它一些任务。下面让我们详细看一下如何在应用程序开发工作中使用这个文件。 概述Global.asax 位 于应用程序根目录下。虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件。 删除它不会出问题——当然是在你没有使用它的情况下。.asax 文件扩展名指出它是一个应用程序文件,而不是一个使 用 aspx 的 ASP.NET 文件。Global.asax 文件被配置为任何(通过 URL 的)直接 HTTP 请求都被自动 拒绝,所以用户不能下载或查看其内容。ASP.NET 页面框架能够自动识别出对Global.asax 文件所做的任何更改。 在 Global.asax 被更改后ASP.NET 页面框架会重新启动应用程序,包括关闭所有的浏览器会话,去除所有状态信息,并重新启动应用程序 域。 编程Global.asax 文件继承自HttpApplication 类,它维护一个HttpApplication 对象池,并在需要时将对象池中的对象分配给应用程序。Global.asax 文件包含以下事件:Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发。对于所有的HttpApplication 对象实例,它都会被调用。Application_Disposed:在应用程序被销毁之前触发。这是清除以前所用资源的理想位置。Application_Error:当应用程序中遇到一个未处理的异常时,该事件被触发。Application_Start:在HttpApplication 类的第一个实例被创建时,该事件被触发。它允许你创建可以由所有HttpApplication 实例访问的对象。Application_End:在HttpApplication 类的最后一个实例被销毁时,该事件被触发。在一个应用程序的生命周期内它只被触发一次。Application_BeginRequest:在接收到一个应用程序请求时触发。对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。Application_EndRequest:针对应用程序请求的最后一个事件。Application_PreRequestHandlerExecute:在 ASP.NET 页面框架开始执行诸如页面或 Web 服务之类的事件处理程序之前,该事件被触发。Application_PostRequestHandlerExecute:在 ASP.NET 页面框架结束执行一个事件处理程序时,该事件被触发。Applcation_PreSendRequestHeaders:在 ASP.NET 页面框架发送 HTTP 头给请求客户(浏览器)时,该事件被触发。Application_PreSendContent:在 ASP.NET 页面框架发送内容给请求客户(浏览器)时,该事件被触发。Application_AcquireRequestState:在 ASP.NET 页面框架得到与当前请求相关的当前状态(Session 状态)时,该事件被触发。Application_ReleaseRequestState:在 ASP.NET 页面框架执行完所有的事件处理程序时,该事件被触发。这将导致所有的状态模块保存它们当前的状态数据。Application_ResolveRequestCache:在 ASP.NET 页面框架完成一个授权请求时,该事件被触发。它允许缓存模块从缓存中为请求提供服务,从而绕过事件处理程序的执行。Application_UpdateRequestCache:在 ASP.NET 页面框架完成事件处理程序的执行时,该事件被触发,从而使缓存模块存储响应数据,以供响应后续的请求时使用。Application_AuthenticateRequest:在安全模块建立起当前用户的有效的身份时,该事件被触发。在这个时候,用户的凭据将会被验证。Application_AuthorizeRequest:当安全模块确认一个用户可以访问资源之后,该事件被触发。Session_Start:在一个新用户访问应用程序 Web 站点时,该事件被触发。  Session_End:在一个用户的会话超时、结束或他们离开应用程序 Web 站点时,该事件被触发。Application_Error 事件显示一个简单的消息用以说明发生的错误。 这个事件列表看起来好像多得吓人,但是在不同环境下这些事件可能会非常有用。使用这些事件的一个关键问题是知道它们被触发的顺序。Application_Init 和Application_Start 事件在应用程序第一次启动 时被触发一次。相似地,Application_Disposed 和 Application_End 事件在应用程序终止时被触发一次。此外,基于会 话的事件(Session_Start 和 Session_End)只在用户进入和离开站点时被使用。其余的事件则处理应用程序请求,这些事件被触发的 顺序是:Application_BeginRequestApplication_AuthenticateRequestApplication_AuthorizeRequestApplication_ResolveRequestCacheApplication_AcquireRequestStateApplication_PreRequestHandlerExecuteApplication_PreSendRequestHeadersApplication_PreSendRequestContent<<执行代码>>Application_PostRequestHandlerExecuteApplication_ReleaseRequestStateApplication_UpdateRequestCacheApplication_EndRequest  这些事件常被用于安全性方面。 转自:http://www.cnblogs.com/xiaopin/archive/2010/08/31/1813747.html

龙生   13 Jul 2012
View Details
1 40 41 42 44