ASPNET错误异常处理说明
- 格式:docx
- 大小:240.90 KB
- 文档页数:4
常见问题1.⽆法运⾏,出现找不到⽂件或程序集名称“.Upload”,或找不到它的⼀个依赖项。
(英⽂:File or assembly name .Upload, or one of its dependencies, was not found. )请将webdisk设为⼀个虚拟⽬录。
设置⽅法见安装步骤。
2.提⽰⽆法找到脚本库"/aspnet_client/system_web/1_0_3705_0/webuivalidation.js"把⽬录中的aspnet_client⽬录移动到⽹站根⽬录。
3.登录时出现⽆法创建⽤户⽬录3.1以后版本请将⽹盘所属的站点⽬录添加⼀个users的⽤户和⽤户,权限为完全控制。
旧版本需要在驱动器盘符上设置权限。
4.注册或登录时出现"操作必须使⽤⼀个可更新的查询"请给webdisk⽬录写⼊数据库的权限或在⽬录上加users写⼊权限。
如⾮NTFS的系统,请将⽹盘⽬录设为共享。
5.出现:The .Net Data OLE DB Provider(System.Data.OleDb) requires Microsoft Data Access Components(MDAC) version 2.6 or later. Version 2.53.6200.0 was found currently installed.请安装MDAC2.8版本。
6.出现:编译器错误信息: CS0016: 未能写⼊输出⽂件“c:\WINDOWS\\Framework\v1.1.4322\Temporary Files\root\ce77d4e8\4b0295f3\x5geka5o.dll”--“拒绝访问。
”类似信息将“C:\WINDOWS”(假设你的系统盘为C:\)下的TEMP⽂件夹的USER⽤户的访问权限更更为,写⼊,或者完全控制。
7.点注册出现正在处理后没有反应,并有脚本错误,⽂件操作没有反应。
错误处理(错误跳转页webconfig)错误处理(错误跳转页 webconfig)分类:学习当中2012-02-23 13:12 281⼈阅读评论(0) 收藏举报 application redirect exception object浏览器错误处理(错误跳转页 webconfig)2008-06-19 13:30使⽤定制错误页⾯虽然我们发送给⽤户的公⽤错误信息是安全的,就是说它不会威胁到应⽤程序的秘密,但是这样的信息并不好看。
也许你希望⽤户永远也看不到这样的信息。
相反,当处理请求的过程中,如果发⽣了⼀个为处理的错误,你希望能够显⽰⾃⼰的“定制错误页⾯”,显⽰出⾃⼰的品牌以及特定的错误信息。
向 应⽤程序中增加定制错误信息⾮常容易。
⾸先,编写⾃⼰的 web页⾯,它可以是任何类型的⽂件:.htm,.aspx,.asp,等等。
然后在应⽤程序的config.web⽂件中修改配置信息,让它指向这个⽂件。
举例说明,以下这个配置信息说明在发⽣了任何未能预定处理错误的情况下,浏览器都应该被重定向到“ErrorPage.aspx”页⾯:<configuration><customerrors mode="remoteonly" defaultredirect="ErrorPage.aspx" /></configuration><customerrors>标记中的“defaultredirect”属性定义了在发⽣错误的情况下,⽤户将被重定向到的“默认”页⾯。
或者,也可以根据响应的http代码状态,重定向到其它的页⾯来覆盖这个默认值。
例如:重定向到⼀个特殊的“未找到⽂件”错误页⾯、“⾮法访问”错误页⾯、“服务器冲突”错误页⾯等等。
举例说明,以下的配置信息覆盖3个特定的http 状态代码,所有其它错误都返回到⼀个默认页⾯:<customerrors defaultredirect="http://anotherhost/error.aspx" mode="remoteonly"><error statuscode="500" redirect="http:/anotherhost/pages/callsupport.html" /><error statuscode="404" redirect="http:/anotherhost/pages/adminmessage.html" /><error statuscode="403" redirect="http:/anotherhost/pages/noaccess.html" /></customerrors>在定制错误页⾯上有⼀件事我们已经遇到过,那就是虽然它们对于已经完成的情况⾮常有⽤,然⽽在开发过程中却⾮常难以对付。
【标题】常见错误,原因及解决方法【错误提示】异常详细信息: .WebException: 请求因HTTP 状态401 失败:Unauthorized。
源错误:行35:[System.Web.Services.Protocols.SoapDocumentMethodAttribute("/HelloWorld", RequestNamespace="/", ResponseNamespace="/", Use=System.Web.Services.Description.SoapBindingUse.Literal,ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]行36:public string HelloWorld() {行37:object[] results = this.Invoke("HelloWorld", new object[0]);行38:return ((string)(results[0]));行39:}【原因分析】1、用的是windows2003,.net framework1.1,.net20032、应该有权限访问,因为原来用程序是可以的,现在用IE 去访问还是可以的,但程序不行;3、iis 没有什么异常,从iis 里面直接浏览调用web 方法没有问题;4、认证方式没有改变一直用的都是windows,改成none 也不行;5、一开始就安装了WSE1.1,是可以的,后来升级到WSE2.0,就不行了,然后卸载了WSE2.0,装上WSE2.0 SP1 还是不行,后来又卸载掉WSE2.0 SP1 还是不行,再重装WSE2.0 SP1 还是不行,不得其解,现在试试卸载掉WSE2.0 SP1 重新用WSE1.1 看行不行,请各位多多帮忙啊。
错误异常处理⽅法我们都知道异常可以⽤ try-catch-finally来捕获并处理异常,这是在程序运⾏时可以捕获处理的。
下⾯介绍⼏种开发上常⽤的错误处理包括: 异常处理1、页⾯级错误处理2、应⽤程序级错误处理3、应⽤程序配置WinForm应⽤程序全局异常处理⼀、页⾯级错误处理在单独页⾯中的错误。
可以在page_error事件中添加处理逻辑代码,通过Server.GetLastError()获取当前页⾯的错误。
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace _22{public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void Page_Error(object sender, EventArgs e){string errMsg = "";Exception currentError = Server.GetLastError();errMsg += "系统发⽣错误:<br/>" +"错误地址: " + Request.Url.ToString() + "<br/>" +"错误信息: " + currentError.Message.ToString() + "<br/>";Response.Write(errMsg);Server.ClearError();//要注意这句代码的使⽤,清除异常。
程序异常处理代码一、没有异常处理代码的程序//创建数据连接对象,连接Northwind数据库SqlConnection conn = new SqlConnection();conn.ConnectionString = "Server=PC-2010;user id=sy2010;password=123456;Database=Northwind;";//创建命令对象SqlCommand cmd = new SqlCommand();//设置命令对象的文本,表Customer本来是Customers,故意将s 去掉的,以产生异常mandText = "Select * from Customer";//设置命令对象的连接对象属性cmd.Connection = conn;//创建数据适配器对象SqlDataAdapter sda = new SqlDataAdapter();//设置数据适配器对象的SelectCommand属性sda.SelectCommand = cmd;//创建DataSet对象DataSet ds = new DataSet();//使用数据适配器对象填充数据集对象sda.Fill(ds);GridView1.DataSource = ds.Tables[0];GridView1.DataBind();其执行结果如下图:二、有异常处理代码的程序//创建数据连接对象,连接Northwind数据库SqlConnection conn = new SqlConnection();try{conn.ConnectionString = "Server=PC-2010;user id=sy2010;password=123456;Database=Northwind;";//创建命令对象SqlCommand cmd = new SqlCommand();//设置命令对象的文本,表Customer本来是Customers,故意将s 去掉的,以产生异常mandText = "Select * from Customer";//设置命令对象的连接对象属性cmd.Connection = conn;//创建数据适配器对象SqlDataAdapter sda = new SqlDataAdapter();//设置数据适配器对象的SelectCommand属性sda.SelectCommand = cmd;//创建DataSet对象DataSet ds = new DataSet();//使用数据适配器对象填充数据集对象sda.Fill(ds);GridView1.DataSource = ds.Tables[0];GridView1.DataBind();}catch (SqlException ex){//使用异常捕获的好处:第一、向管理员报告异常,第二、为用户提供一个友好的提示:系统正在维护中Response.Write("SqlException" + ex.Message);}catch (Exception ex){Response.Write("Exception" + ex.Message);}//释放资源finally{if (conn != null)conn.Dispose();Response.Write("finally代码执行部分:完成");}其执行结果如下图:三、获得“Sql错误信息”的程序代码//创建数据连接对象,连接Northwind数据库SqlConnection conn = new SqlConnection();try{//user id本来为sy2010,现故意将其改为sy20101,以出现异常conn.ConnectionString = "Server=PC-2010;user id=sy20101;password=123456;Database=Northwind;";//创建命令对象SqlCommand cmd = new SqlCommand();//设置命令对象的文本mandText = "Select * from Customers";//设置命令对象的连接对象属性cmd.Connection = conn;//创建数据适配器对象SqlDataAdapter sda = new SqlDataAdapter();//设置数据适配器对象的SelectCommand属性sda.SelectCommand = cmd;//创建DataSet对象DataSet ds = new DataSet();//使用数据适配器对象填充数据集对象sda.Fill(ds);GridView1.DataSource = ds.Tables[0];GridView1.DataBind();}catch (SqlException ex)Response.Write("异常信息:" + ex.Message + "<br>");foreach (SqlError error in ex.Errors){Response.Write("Source: " + error.Source + "<br>" +"Number: " + error.Number.T oString() + "<br>" +"State: " + error.State.ToString() + "<br>" +"Class: " + error.Class.ToString() + "<br>" +"Server: " + error.Server + "<br>" +"Message: " + error.Message + "<br>" +"Procedure: " + error.Procedure + "<br>" +"LineNumber: " + error.LineNumber.T oString());/*error对象各属性的含义:(1)Source,获取生成错误的提供程序的名称(2)Number,获取一个标识错误类型的数字(3)State,状态编号其取值范围为1至127,状态编号指示发现错误的源位置(4)Class,获取从SQL Server返回的错误的严重程度(级别)(5)Server,获取生成错误的SQL Server实例的名称(6)Message,获取对错误进行描述的文本(7)Procedure,获取生成错误的存储过程或远程调用(RPC)的名称(8)LineNumber,从包含错误的Transact-SQL批命令或存储过程中获取行号*/}}finallyif (conn != null)conn.Dispose();Response.Write("<br>finally代码执行部分:完成");}其执行结果如下图:注:一、异常概念1.程序中错误的类型(1)语法错误(2)逻辑错误(3)运行时异常,比如数据库连接不存在、被0除2.DOTNET异常处理机制程序发生异常后,将寻找异常处理代码,如果不存在异常处理代码,.NET Framework将处理该异常(演示异常发生状况),.NET Framework处理异常的方式就是将异常信息报告给用户二、异常处理方式1.try(捕捉异常/抛出异常)2.catch(抓住异常/处理异常)(1)抓异常的过程是一个匹配异常类的过程,如果匹配就执行相应的异常处理代码(2)Exception是所有异常处理类的基类,将匹配所有的异常类3.finally(执行资源清理)(1)不过是否发生异常都将执行异常处理(2)finally不是必须的,在编程时可以根据需要进行应用三、Exception类1.System.Exception类表示在应用程序执行期间发生的错误2.System.Exception 类是所有异常的基类型Message 属性是 string 类型的只读属性,它包含对发生异常的原因的可读描述四、自定义异常处理类1.如果在程序执行过程中所引发的异常在C#中没有定义,这是我们可以自定义异常处理类以向用户提示异常信息。
中处理异常的几种方式程序中使用try catch对于预知会发生异常的代码段使用try catch主动捕获异常适用于提示给用户或跳转到错误页面或者通过其它方式处理异常(日志通知等)int i = ;int j = ;try{Label Text = (i / j) ToString()}catch (Exception ex){// 这里处理异常 Redirect Transfer Log Notice等Console WriteLine( Page: + ex Message)}Global中使用Application_Error如果异常在程序中没有被处理(如没有try catch)则异常的处理会流转到这个方法这里边可以对异常进行处理但是此方式不能捕捉子线程中的异常int i = ;int j = ;Label Text = (i / j) ToString()void Application_Error(object sender EventArgs e){// 在出现未处理的错误时运行的代码Server Transfer( ErrorPage aspx )}string message = HttpContext Current Error != null ?(HttpContext Current Error InnerException != null ? HttpContext Current Error InnerException Message : string Empty): string Empty;Label Text = message;在nfig中配置出现错误后跳转到ErrorPage aspx 和Application_Error类似采用redirectMode模式可以传递异常到错误页面使用FirstChance异常通知关联到AppDomain 如果应用程序域内发生异常则会首先触发这个事件然后才查找catch块处理异常不过在这个事件中不能处理异常不能消灭异常只是可以按照通知进行处理因为如果这里处理了异常catch块就不能进行处理了void Application_Start(object sender EventArgs e){// 在应用程序启动时运行的代码AppDomain CurrentDomain FirstChanceException += new EventHandler<System Runtime ExceptionServices FirstChanceExceptionEventArgs>(CurrentDomain_FirstChanceException)}void CurrentDomain_FirstChanceException(object sender System Runtime ExceptionServices FirstChanceExceptionEventArgs e){Console WriteLine(e Exception Message)// 错误响应在上下文中不能使用// Response Redirect( ErrorPage aspx )// 错误未将对象引用设置到对象的实例// Server Transfer( ErrorPage aspx )}绑定UnhandledException事件关联到AppDomain 关于这个事件并不是每次都能触发和使用的方式有关情况比较多一般情况下我们只能获取这个异常而不能阻止中断应用程序下边给出一个例子void Application_Start(object sender EventArgs e){// 在应用程序启动时运行的代码AppDomain CurrentDomain UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException)}void CurrentDomain_UnhandledException(object sender UnhandledExceptionEventArgs e){Console WriteLine(e Exception Message)}一般的未处理异常都会被Application_Error捕捉到我们这里在线程中抛出一个异常另外StackOverflowException在net 中不再能被UnhandledException捕捉到private void CutString(){//throw (new Exception( Test Unhandled exception ))//throw (new StackOverflowException(Test Unhandled exception ))}protected void Button _Click(object sender EventArgs e){Thread th = new Thread(new ThreadStart(CutString))th Start()}延伸子线程异常的处理网上有介绍通过代理在主线程处理子线程的异常但是在中是无状态的主线程有可能很快消失其中的某些处理可能执行失败这里使用Thread Sleep使主线程不会很快结束这种异常处理起来很麻烦不建议在中使用处理时间很长的线程protected void Button _Click(object sender EventArgs e){Thread th = new Thread(new ThreadStart(() =>{try{throw (new Exception( Test Unhandled exception ))}catch (Exception ex){//跳转到错误页面Response Redirect( ErrorPage aspx )}}))th Start()// 主线程会很快结束这里让他等等页面跳转Thread Sleep()}lishixinzhi/Article/program/net/201311/12051。
错误处理方法归结(方法1):page_error 事件最近接触这方面的知识比较多,从网上搜集了些资料,总结出来,供大家参考,有不妥的地方,还请大家多多指正。
言归正传, 提供了三种用于在出现错误时捕获和响应错误的主要方法:page_error 事件、application_error 事件以及应用程序配置文件(Web.config)。
这三种方法的主要作用无非是创建自定义的错误报告,创建自定义错误报告的作用无非是:出于安全方面的考虑,还有就是为了向用户展示友好的错误页面,提高程序的友好性。
话不多说,首先介绍提供的第一种错误处理方法:Page_Error 事件,现举例说明如下:Page_Error 事件提供了一种捕获页面级错误的方法。
对于错误的处理,您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。
备注:此示例在浏览器中显示了详细的错误信息,提供此示例只是为了进行说明。
向应用程序的最终用户展示出错的详细信息是非常危险的(尤其是web程序)。
更适当的做法是向用户显示一条消息,告知其已发生错误,然后将具体的错误信息记录在事件日志中。
本例是在Page_Load事件中有意引发一个空异常来测试Page_Error 事件的。
举例:创建web程序—新建页面PageEvent.aspx,然后将以下代码添加到PageEvent.aspx中:<script language="C#" runat="server">void Page_Load(object sender, System.EventArgs e){// 引发“空引用”异常throw (new ArgumentNullException());}public void Page_Error(object sender, EventArgs e){Exception objErr = Server.GetLastError().GetBaseException(); // 获取错误string err = "1.error in: " + Request.Url.ToString() + "</br>" +"2.error Message: " + objErr.Message.ToString() + "</br>" +"3.stack Trace: " + objErr.StackTrace.ToString() + "</br>";Response.Write(err.ToString()); //输出错误信息// Response.Redirect("ErrorPage.htm"); //可以重定向到友好的错误页面Server.ClearError();}</script>保存,右击该页面—“在浏览器中查看”,即可看到捕获到的自定义错误信息。
常见错误大全检测到有潜在危险的 Request Form 值原因:( )在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置( )HTML里面写了两个<form>引起解决:方案一在 aspx文件头中加入这句 <%@ Page validateRequest= false %>方案二修改nfig文件:<configuration><system web><pages validateRequest= false /></system web></configuration>因为validateRequest默认值为true 只要设为false即可在没有任何数据时进行无效的读取尝试解决办法原因所返回的sqldatareader无数据记录但没有作记录判断力处理返回的是空值加上判断即可 if (reader read()) { TextName Text =reader[ FieldName ] ToString(); }数据为空不能对空值调用此方法或属性原因:若对象是null 那么调用对象的方法例如ToString()肯定出错一般是数据库字段的值为空在grideview等数据控件常出现解决:因此建议作NULL处理阅读器关闭时 FieldCount 的尝试无效原因:使用了SqlDataReader来绑定数据后将connection对象作了Close()处理类似public SqlDataReader GetSomething(){conn open();SqlDataReader reader =sqlcmd ExcecutReader(CommandBehavior CloseConnection));conn close();// occur error herereturn reader;}在绑定的时候调用了这个方法来指定数据源如果使用这个方法则需要在调用函数中关闭Reader这样conn就可以自动关闭如果是使用的是SqlDataAdapter和DataSet那么请去掉显式关闭conn的调用或者在finally中调用之未能映射路径原因:可能是在webconfig中的路径配置不正确所致在FCKEditor 的配置中这种问题比较突出<add key= FCKeditor:BasePath value= ~/admin/fckeditor/ /> <add key= FCKeditor:UserFilesPath value= /UserFiles/ />Unreachable code detected原因一般是在异常处理理或返回值时使用了 throw 或return 可能是其位置放在前面造成后面的代码执行到了解决把相关的异常抛出处理的语句(throw)或return 的语句放到代理执行的最后一行索引超出范围必须为非负值并小于集合大小原因( ) 没有设置DATAKEYFIELD设为数据库中相对应的唯一字段(一般是主键)( ) DataGrid Columns > e Item Cells解决( ) 设置datakeyfield( ) 加入判断语句unt (datagrid可以是其它相类似的服务器控件) 数据源不支持服务器端的数据分页解决方法:不要使用DataReader 改成使用DataSet 或使用自定义分页形式不采用提供的分页功能OleDbDataAdapter da = new OleDbDataAdapter(sql connection);DataSet ds = new DataSet();da Fill(ds News );GridView DataSource = ds ;GridView DataBind();对象名 ***** 无效原因:当前使用的数据库中没有*****这张表解决: 查看是否程序中是否写错了所调用的表的名称或看一下SQL 数据库中是否存在你所调用的表在建立与服务器的连接时出错在连接到 SQL Server 时在默认的设置下 SQLServer 不允许进行远程连接可能会导致此失败 (provider: 命名管道提供程序error: 无法打开到 SQL Server 的连接)solution: 主机上需要用固定的IP地址或服务器地址SqlDateTime 溢出必须介于 / / : : AM 和 / / : : PM之间出现这种问题``多半是因为你更新数据库时``datetime字段值为空``默认插入年月日``造成datetime类型溢出出现表示属性此处应为方法原因:VB与c#的方法属性的格式有所不一样导致可能是在design中绑定数据的语法出现错误解决: 记住属性用[] 方法用()记住绑定数据的正确语法(有以下几种方式::<%Container DataItem( 字段名 )%> <%#Eval( 字段名 )%> <%Bind( 字段名 )%>等)未能从程序集 DAL Version= Culture=neutralPublicKeyToken=null 中加载类型 DAL SqlHelper原因:修改了其他层后未能重新编译成dll解决:编译一下(Rebuild)为过程或函数指定的参数太多solution:调用存储过程与定义的存储过程所用的参数数量或所执行的SQL语句中所传入的参数个数不一致(这是个SQL的错误)解决方案:仔细检查在存储过程中所设定的参数变量与实际输入的参数值是否一一对应无法启动调试绑定句柄无效原因:系统的Terminal Services没有开启Unable to debugging on the web server Debug failed because integrated windows authentication is not enable 解决方法:打开vs >工具(Tools) >选项(Option) >调试(debugging) >编辑并继续(Edit and Continue) >全部打勾Automation 操作中文件名或类名未找到: RegExp解决方法:regsvr vbscript dllSystem NullReferenceException: 未将对象引用设置到对象的实例原因:( )所设置的变量为空值或没有取到值一般出现在传递参数的时候出现这个问题也会在使用datagrid或gridview或datalist等数据控件时出现( )控件名称与codebehind里面的没有对应( )未用new初始化对象( )在程序中所引用的控件不存在解决方法:( )使用try catch finally捕捉错误或直接用response write()输出所取的变量值( )查看代码中是否存在未初始化的变量错误文件被数字签名策略拒绝(安装vs sp 时)解决方法:( ) 单击开始单击运行键入 control admintools 然后单击确定( ) 双击本地安全策略( ) 单击软件限制策略 (注意如果未列出软件限制请右击软件限制策略然后单击新建策略 )( ) 在对象类型下双击强制( ) 单击除本地管理员以外的所有用户然后单击确定( ) 重新启动计算机微软说明vs 不能从源文件模式切换到视图模式解决方法:dos下运行下 devenv /resetskippkgs (win+r cmd)Validation of viewstate MAC failed解决办法:页面的顶部page加EnableViewState= False EnableViewStateMac = False 来解决这个问题Automation server can t create object (Automation 服务器不能创建)解决办法:运行: Regsvr scrrun dll 即可包加载失败未能正确加载包Visual Web Developer Trident Designer Package (GUID ={ AE E C D E F A AEFF }解决方法:设置系统变量 VsLogActivity=在%APPDATA%\Microsoft\VisualStudio\ \文件夹下创建文件ActivityLog xmlErrorMicrosoft Visual StudioLoadLibrary failed for package [Visual Web Developer Trident Designer Package]{ AE E B C D E F A AEFF }ec:\Program Files\Microsoft Visual Studio \Common \Packages\tridsn dll从 WINNT\MicroSoft NET\Framework\v xxx 复制文件gdiplus dll 到 Program Files\Visual Studio \Common \Packages文件夹下在命令行下运行命令 devenv /resetskippkgsError spawning cmd exe解决方案:把cmd exe 拷贝到VS安装目录下的VC/BIN目录里可以解决问题尝试读取或写入受保护的内存解决:硬件有问题一般内存有问题无法在证书存储区中找到清单签名证书解决方法:用记事本打开项目的 csproj文件删除类似该项目中不存在目标 ResolveKeySource原因:这个问题很罕见查询国外相关资料后大致说是由于部署的不是一个标准的solution 需要在VS自带的命令提示中运行下面这个东西恢复解决方法:( ) 将下列代码存为XML文件命名为TestBuild xml<Project DefaultTargets= Build xmlns= ><PropertyGroup><TargetConnectionString>Data Source= \sql % BUser ID=SqlUser% BPooling=False% BPassword=X</TargetConnectionString></PropertyGroup><ItemGroup><DatabaseProject Include= Database \Database dbproj /> <DatabaseProject Include= Database \Database dbproj /> </ItemGroup><Target Name= BuildAllDatabaseProjects ><MSBuildProperties=TargetConnectionString=$(TargetConnectionString)Projects= @(DatabaseProject)Targets= Build;Deploy ></MSBuild></Target>( )在命令提示中运行:m *** uild /t:BuildAllDatabaseProjects TestBuild xml</Project>不能将值 NULL 插入列 **原因:这是数据库表设计的错误所涉及的表的字段中设置了不能为空的属性但是传入的值为null 所以报错解决方法:查看是否所传入的值是否为Null 或修改数据库中表的所对应的列的属性未能加载类型命名空间类原因:( )项目修改后没有进行编译( )项目中原有的命名空间可能被修改了( )项目中所需要的ascx或其他页面不存在或不包含在项目中解决方法:( )在修改完成之后请重新生成或编译整个项目或解决方案( )手工修改所改动的命名空间注意名称的大小写再重新编译( )将相关的文件包含在项目中不能访问只读文件 **** ***解决方案:给虚拟目录所对应的文件加上 Everyone/写入权限即可请求因 HTTP 状态失败 Access Denied解决方法:在iis信息服务器上把匿名访问和允许iis控制密码给勾上有一个无效 SelectedValue 因为它不在项目列表中原因( )在没有绑DropDownList之前就给DropDownList SelectedValue 赋值( )dropdownlist中出现了null值无法在已存在的情况下创建/影像复制该文件解决方案重新编译项目(多个project全部重新编译) 关闭vs 重新打开必要时重新启动机子用户 C\ASPNET 登录失败登录失败异常详细信息: System Data SqlClient SqlException: 用户COO\ASPNET 登录失败这是怎么回事啊?因为你的程序连接SQLServer的连接字符串是用了windows集成登陆你可以改成用数据库帐号密码登陆连接字符串的写法是server=localhost;uid=sa;pwd=xxxx;database=master;server是数据库服务器的机器名或者IP 如果是同一台机可以用localhostuid是数据库登陆帐号pwd是数据库密码database是数据库初始owner名称答案右击桌面我的电脑选择管理双击打开的计算机管理对话框中的本地用户和组下的组在右边的窗口中双击 Remote Desktop Users 组在打开的 Remote Desktop Users 属性对话框中单击添加在打开的添加用户对话框中单击高级再单击立即查找按钮在搜索结果中双击ASPNET(如果是IIS NEOR SERVERCE )再点击两次确定完成添加用户单击开始所有程序 Microsoft SQL Server 企业管理器在打开的控制台根目录选择相应的数据库右击该数据库的中的用户选择新建数据库用户在新建用户对话框中点击登陆名右侧的下拉列表框选择新建打开新建登陆对话框点击名称右侧的省略号按钮在打开的对话框中将列出的名称中选择本机的名称再在下面的名称框中选定Remote Desktop Users 然后点击成员按钮双击 ASPNET(如果是IIS NEOR SERVERCE )然后点击确定在新建登陆对话框中的默认设置的数据库选项中选择相应的数据库名称再在数据库访问选项下勾选相应的数据库点击确定完成将默认的匿名用户添加到SQL 用户 nt authority\neork service 登录失败> sqlserver 调成sql server 和windows验证模式>(以下方法仅供参考)第一步把NT AUTHORITY\NEORK SERVICE 添加到Administrator组中我的电脑 >右键 >管理 >本地用户和组选择组 >双击Administrators >单击添加 >单击高级 >单击立即查找 >在下面的列表中选择Neork Service用户 >两次单击确定 >加入第二步在企业管理器中加入NetWord Service用户打开Sql Server企业管理器>选择数据库实例>打开安全性节点 >选择登录 >在右边的列表中单击右键 >选择新建登录 >在常规选项卡中单击名称旁边的按钮 >选择 Administrators 组 >单击下面的成员按钮 >选择 Neork Service >单击添加按钮 >单击确定返回新建登录对话框 >保证身份验证类型为 windows验证和允许访问 >单击确定 >关闭企业管理器第三步重新运行程序数据库连接字符串选择windows验证即可> 在sqlserver中添加帐户或IIS_WPG工作组此方法来自于未能加载视图状态正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配例如当以动态方式添加控件时在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配原因 viewstate的在作用是将控件的状态保存在下次Post给服务器服务器进行恢复控件的状态(控件的状态包括值和事件)解决方法( )每一个UserControl的viewstate都改为false( )加入这个this Page EnableViewState = false;此方法来源于 _astar/archive/ / / /l由于启动用户实例的进程时出错导致无法生成SQL Server 的用户实例该连接将关闭问题原因这是微软的bug 并且微软已经承认详情如下出现此错误的条件是你用过远程桌面连接并且安装了SQL +VS 就有很大可能触发这个问题微软说会在将来的XP SP 里面解决掉这个问题解决ID= &SiteID=如果你看不懂英文那么我告诉你我的解决办法删除C:\Documents and Settings\[USERNAME]\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS目录即可 [USERNAME]是Windows用户名比如说Administrator此问题来于Server Application UnavailableThe web application you are attempting to access on this web server is currently unavailable Please hit the Refresh button in your web browser to retry your requestAdministrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server Please review this log entry to discover what caused this error to occur解决如果你运行WinXP/IIS 为了给ASPNET工作进程访问你的web工程文件夹的权力请到网站文件所在的目录右键一级文件夹选Security -Add-键入 ASPNET 点击OK或点击Check Names 如果弹出对话框提示 Name not Found 则应点击Locations改变位置到本机计算机名点击OK 分配此用户权限为 Full Control 点击OK错误变为You are not authorized to view this pageYou do not have permission to view this directory or page using the credentials you supplied解决在IIS里右键此虚拟目录-Properties-Directory Security-Edit 勾选上Integrated Windows authentication即可超时时间已到超时时间已到但是尚未从池中获取连接出现这种情况可能是因为所有池连接均在使用并且达到了最大池大小可能原因如下并发操作Connection用后没有关闭或者因为DataReader连接独占连接解决方法修改几个关键页面或访问比较频繁的数据库访问操作使用DataAdapter和DataSet来获取数据库数据不要使用DataReader 在访问数据库的页面上使用数据缓存如果页面的数据不是经常更新(几分钟更新一次)的话使用Cache对象可以不用访问数据库而使用缓存中的内容那么可以大大减少连接数量修改代码把使用Connection对象的地方都在Close()后面加上Dispose()调用建议对数据库操作进行大的修改建立自己的数据库操作代理类继承System IDisposable接口强迫释放资源这样就不会出现连接数量不够的问题了包加载失败未能正确加载包Visual Web Developer Trident Designer Package (GUID ={ AE E C D E F A AEFF } 请与包供应商联系以获得帮助由于可能会发生环境损坏建议重新启动应用程序要禁止将来将来加载此包吗?可以使用 devenv reswetskippkgs 重新启用包加载每次开机打开vs 都会有这个提示烦于是在google了一下发现很多方法都试过了只有一个解决一试就行解决方法如下:设置系统变量 VsLogActivity=在%APPDATA%\Microsoft\VisualStudio\ \文件夹下创建文件ActivityLog xml从 WINNT\MicroSoft NET\Framework\v xxx 复制文件gdiplus dll 到 Program Files\Visual Studio \Common \Packages文件夹下在命令行下运行命令 devenv /resetskippkgs注:发现此问题只有在win 会出现 win 就不会出现这个问题用户 xxx\ASPNET登录失败第一步把 NT AUTHORITY NetWORK SERVICE 添加到Administrator 组中我的电脑 >右键 >管理 >本地用户和组选择组 >双击Administrators >单击添加 >单击高级 >单击立即查找 >在下面的列表中选 Neork Service用户 >两次单击确定 >加入第二步在企业管理器中加 Neork Service用户打开Sql Server企业管理器>选择数据库实例>打开安全性节点 >选择登录 >在右边的列表中单击右键 >选择新建登录 >在常规选项卡中单击名称旁边的按钮 >选择 Administrators 组 >单击下面的成员按钮 >选择 Neork Service >单击添加按钮 >单击确定返回新建登录对话框 >保证身份验证类型为 windows验证和允许访问 >单击确定 >关闭企业管理器第三步重新运行asp Net程序数据库连接字符串选择windows验证即可以上针对win 如果是win 加ASp Net用户无法在已存在的情况下创建/影像复制该文件解决方法重新编译整个项目或者重启电脑Could not create an environment: OCIEnvCreate returned 解决方案一主要是将oracle主目录oracle\的读写权限赋予或者是IUSER_ 和IWAM_ 重启计算机解决二:打开在IIS中的WEB属性--主目录--执行权限【改为-脚本和可执行文件】-应用程序池【改为-MSSharePointAppPool】刷新OK文件夹权限可以不用管设置ORACLE_HOME变量的方法如下控制面板>>系统>>高级>>环境变量>>系统变量>>新建系统变量变量名写ORACLE_HOME变量值添实际的ORACLE_HOME路径在注册表中有由于目标机器积极拒绝无法连接在添加完引用后用localhost替换掉所有的localhost: 重新编译能加载视图状态正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配例如当以动态方式添加控件时在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配解决在页面的 Page 项添加 EnableViewState= false 即可在以下方法或属性之间的调用不明确 method 和 method因隐式转换的缘故编译器无法调用重载方法的某种形式可以用以下方法纠正该错误以不发生隐式转换的方式指定此方法的参数移除此方法的所有重载在调用方法之前强制转换到正确的类型在应用程序级别以外使用注册为allowDefinition= MachineT oApplication解决在网站对应的虚拟目录上右键选属性然后在应用程序名后点创建名字随便填[子目录不会继承上级的属性所以要将aspx文件所在的目录属性设置正确]无法识别的配置节 connectionStrings原因用vs 开发的应用程序需要使 framework 而在iis中的默环境是这时将发生不可识别的节点的问题环境升级为开始-》运行-》cmd-》C:\WINDOWS\Microsoft NET\Framework\v \aspnet_regiis exe iTimeout expired The timeout period elapsed prior to obtaining a connection from the pool This may have occurred because all pooled connections were in use and max pool size was reachedDescription: An unhandled exception occurred during the execution of the current web request Please review the stack trace for more information about the error and where it originated in the codeException Details: System InvalidOperationException: Timeout expired The timeout period elapsed prior to obtaining a connection from the pool This may have occurred because all pooled connections were in use and max pool size was reached 主要原因可能有使用了连接池大量的sqlconnection用了后忘记关闸门导致SQL 占用严重可以用 exec sp_who 这个存储过程查看一下连接池的连接数有所限制解决方法:释放连接池调用Connection对象的Close()方法关闭数据库连接利用try catch finally对数据库连接进行异常处理当无法连接数据库时将抛出异常并显示出错信息见catch代码块所示在此程序中无论是否发生异常都可以通过finally区块关闭数据库的连接从而节省计算机资源将SqlConnection对象包含到using区块中这样程序会自动调用Dispose()方法释放SqlConnection对象所占用的系统资源无需再使用SqlConnection对象的Close()方法指定min pool size表示连接池允许的最小连接数(默认为)下面的代码指定了SqlConnection对象的max pool size为min pool size为lishixinzhi/Article/program/net/201311/11175。
一、配置文件(web.config):1、SQL Server 2008配置方案<appSettings><add key="ExceptionLogAccessType" value="DataBase"/><add key="ConnectionString"value="server=PC-20131012HXIE;database=ExceptionLogDB;uid=sa;pwd=123"/></appSettings>2、Text文本文件配置方案<appSettings><add key="ExceptionLogAccessType" value="Text"/><add key="filePath" value="ExceptionLogContext.data"/></appSettings>3、Xml文件配置方案<appSettings><add key="ExceptionLogAccessType" value="Xml"/><add key="filePath" value="ExceptionLogContext.xml"/></appSettings>二、建立数据库表(如果是选择SQL Server 2008配置方案)(可选)三、修改代码Global.asax.cs,添加和修改成如下代码:void Application_Error(object sender, EventArgs e){// 在出现未处理的错误时运行的代码//获取到HttpUnhandledException异常,这个异常包含一个实际出现的异常Exception ex = Server.GetLastError();//实际发生的异常Exception iex = ex.InnerException;//使用实例Model记录所有数据ExceptionLogManager.ExceptionLogContext ELC = new ExceptionLogManager.ExceptionLogContext();if (iex != null){ELC = AppendExceptionToLogContext(iex);}else{ELC = AppendExceptionToLogContext(ex);}Server.ClearError();//处理完及时清理异常}public string GetCookiesToString(HttpCookieCollection Cookies){string str = "";foreach (string cookie in Cookies){str += cookie + " & " + Cookies[cookie].Value + "<br/>";}return str;}/// <summary>/// 异常处理/// </summary>/// <param name="e"></param>/// <returns>异常处理上下文</returns>ExceptionLogManager.ExceptionLogContext AppendExceptionToLogContext(Exception e){ExceptionLogManager.ExceptionLogContext ELC = new ExceptionLogManager.ExceptionLogContext();HttpContext.Current.Response.Write("<======================来自Global的错误处理===================><br />");HttpContext.Current.Response.Write("【Message】" + e.Message + "<br/>"); ELC.Message = e.Message + "<br/>";HttpContext.Current.Response.Write("【StackTrace】" + e.StackTrace + "<br/>"); ELC.StackTrace = e.StackTrace + "<br/>";HttpContext.Current.Response.Write("【Request Url】" + HttpContext.Current.Request.Url + "<br/>"); ELC.HttpRequestUrl = HttpContext.Current.Request.Url + "<br/>";HttpContext.Current.Response.Write("【Request Cookies】" + HttpContext.Current.Request.Cookies.Count + "<br/>"); ELC.HttpCookies = HttpContext.Current.Request.Cookies.Count + "<br/>";HttpContext.Current.Response.Write(GetCookiesToString(HttpContext.Current.Request.Cookies));ELC.HttpCookies += GetCookiesToString(HttpContext.Current.Request.Cookies);HttpContext.Current.Response.Write("【Request Query String】" + HttpContext.Current.Request.QueryString.Count + "<br/>"); ELC.HttpQueryString = HttpContext.Current.Request.QueryString.Count + "<br/>";foreach (string queryStr in HttpContext.Current.Request.QueryString){HttpContext.Current.Response.Write(queryStr + "<br/>");ELC.HttpQueryString += queryStr + "<br/>";}HttpContext.Current.Response.Write("【Request Http Headers】" + HttpContext.Current.Request.Headers.Count + "<br/>");ELC.HttpHeader = HttpContext.Current.Request.Headers.Count + "<br/>";foreach (string header in HttpContext.Current.Request.Headers){HttpContext.Current.Response.Write(header + "<br/>");ELC.HttpHeader += header + "<br/>";}HttpContext.Current.Response.Write("【Request Http Post body】" + HttpContext.Current.Request.Form.Count + "<br/>");ELC.HttpPostBody = HttpContext.Current.Request.Form.Count + "<br/>";foreach (string form in HttpContext.Current.Request.Form){HttpContext.Current.Response.Write(form + "<br/>");ELC.HttpPostBody += form + "<br/>";}ELC.HappenedTime = HttpContext.Current.Timestamp;ExceptionLogManager.ExceptionLogAccess access = ExceptionLogManager.ExceptionLogAccess.getInstance();try{access.Append(ELC);}catch (System.Data.SqlClient.SqlException sqlEx){}return ELC;}注意事项:这是只是异常处理的保存,通过ExceptionLogAccess的Append方法,写入。
如果要读取的话,现在只写了一个Read方法,读取全部的数据,返回DataSet。
文本保存和XML保存都是通过序列化的方式保存的,所以保存过后,单独看文件是看不出里边写的什么内容的,需要通过反序列化后,读取出来才能看到了。
现在保存的只是Http 有关的上下文,如果需要可以扩展。