web.config是asp.net中保存配置信息(比如数据库连接字符串等)的重要文件。它是基于xml的文本文件方式放在Web应用程序的任何目录中,并且默认不随源文件编译到Dll中,而运行环境随时监视着它是否有改变,一但有变动,系统会自动重新加载里面的最新内容。 一、 配置文件保存位置 .net的默认配置文件保存在“windows目录\Microsoft.NET\Framework\对应.net版本\config”文件夹下面。不同的操作系统windows目录不一样,我们在命令行下输入“echo %windir%”查看windows目录所在的位置。 图:web.config所在的目录 Asp.net中有两个非常重要的配置文件,分别是machine.config和web.config,它们都位于config文件夹下面。这两个文件一般不需要我们手工是维护它,保持默认即可。但针对asp.net应用程序,它自身会有0个,1个或者多个web.config配置文件,多个配置文件会存在加载顺序问题。下节会介绍。 注意,传说中.net3.0和.net3.5只是在.net2.0的基础上扩充中,所以还是没用的.net2.0的配置文件。它们连config这个目录都没有。 二、 配置文件加载顺序 IIS在Asp.net网站启动时,会加载配置文件中的配置信息,然后缓存这些信息,不会每次要用都去读取配置文件,只是IIS会随时监视着这些文件的变化,一量有变化,它会重新去读取并缓存配置信息。 Asp.net网站运行时会按照以下方式加载配置文件中的节点信息: 1) 如果在当前运行页面所在的目录下有web.config文件,则查找是否存在所需要的节点,如果存在则返回结果,并停止下一步地查找。 2) 如里所在目录不存在web.config配置或者配置文件里没有所需要的节点,则查找它所在的上一级目录的配置文件中的节点,直到网站根目录。(问题:IIS6中的虚拟目录算不算根目录) 3) 如果网站根目录中都不存在web.config或者所需要的配置节点,转而到“windows目录\Microsoft.NET\Framework\对应.net版本\config\web.config”中去查找。 4) 如果第3条中还没找到,继续到“windows目录\Microsoft.NET\Framework\对应.net版本\config\machine.config”中去查找。 5) 如果还没找到,那就报错吧。 存在两个问题 1) IIS6中的虚拟目录算不算根目录。 2) 在系统运行时,在一个原本没有web.config的目录中手工加上一个web.config,会不会自动加载。 三、 配置文件节点介绍 Web.config文件是一个xml文本文件,它的根节点为<configuration>,该节点下包含常见的子节点有:<configSections>、<appSettings>、<connectionStrings>(保存数据库连接字符串)、<location>和<system.web>。下面针对各节点配置进行介绍。 1. <configSections> configSections 元素指定了配置节和处理程序声明。由于 ASP.NET 不对如何处理配置文件内的设置作任何假设,因此这非常必要。但 ASP.NET 会将配置数据的处理委托给配置节处理程序。配置结构信息如下: <configSections> <!--定义配置节处理程序与配置元素之间的关联。--> <section /> <!--定义配置节处理程序与配置节之间的关联。--> <sectionGroup /> <!--移除对继承的节和节组的引用。--> <remove /> <!--移除对继承的节和节组的所有引用,只允许由当前 section 和 sectionGroup 元素添加的节和节组。--> <clear/> </configSections> 每个 section 元素标识一个配置节或元素以及对该配置节或元素进行处理的关联 ConfigurationSection 派生类。可以在 sectionGroup 元素中对 section 元素进行逻辑分组,以对 section 元素进行组织并避免命名冲突。section 和 sectionGroup 元素包含在 configSections 元素中。 如果配置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素。 下面我们来示例写一个自定义配置信息,并完成它的SectionHandler,首先我们在<configuration>节点下添加configSections。 <configuration> <configSections> <sectionGroup name="mySectionGroup"> <section name="mySection" requirePermission="true" type="ConfigTest.SectionHandler.MySectionHandler,ConfigTest.SectionHandler" /> […]
View Details本文From hongshengpeng 解决ASP.NET 4.0 "A potentially dangerous Request.Form value was detected from the client". 错误在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。(在.aspx文件头中加入这句: <%@ Page validateRequest="false" %>,但还是出现相同错误) 或是修改web.config文件: <configuration> < system.web> <pages validateRequest="false" /> < /system.web> < /configuration> 但错误依旧。对.NET 4.0, 应该加上requestValidationMode="2.0" to the httpRuntime configuration section of the web.config :<httpRuntime requestValidationMode="2.0"/>(这句重要) 结构:<configuration> <system.web> <httpRuntime requestValidationMode="2.0">
View Details本文将揭示.NET 4.0中的3个新特性:图表控件、SEO支持以及ASP.NET 4可扩展的输出缓存。 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或WinForms项目中使用这些控件。要想在Visual Studio 2008中使用这些控件则需要安装一个插件,该插件提供了VS工具箱及智能集成功能。现在这些控件已经集成到了.NET 4.0中,这样就无需再去下载额外的插件了。Samples Environment for MS Chart Controls提供了这些控件的使用示例。下图是示例的运行截图: ASP.NET 4.0 SEO 微软发布了一个SEO Toolkit并集成到了IIS 7中,同时可以在IIS Manager中运行。除了可以创建站点地图和地图索引外,该工具集还能够从SEO的视角分析站点情况,在出现SEO规则违例时生成报告:创建错误描述并给出进一步的改进提示。这些规则有:重复的文件、重复的标题、没有内容、过多的内容等等。该工具集会从性能视角分析站点,识别出运行缓慢或是会访问很多资源的页面。我们还可以通过增加自定义规则来扩展该工具集。 虽然该SEO Toolkit需要运行在IIS Manager上,但并不需要在服务器上安装别的东西。此外,它还可以对所有操作系统上的所有Web服务器进行分析。Scott Guthrie总结了可以进一步提升SEO的ASP.NET 4.0中的新特性,如下: ◆Page.MetaKeywords与Page.MetaDescription; ◆ASP.NET Web Forms的URL Routing支持; ◆Response.RedirectPermanent()。 我们可以通过Page类的MetaKeywords和MetaDescription属性以编程的方式设定站点的关键词和描述。Guthrie阐述了这么做的意义所在: ASP.NET 4.0的<head>服务器端控件会在输出页面的<head>部分时使用到他们,这对于使用了母板页的站点非常有用——<head>部分位于.master文件中,这就与包含了具体页面内容的.aspx文件独立开来,现在可以在.aspx页面中设定新的MetaKeywords和MetaDescription属性并通过母板页中的<head>控件自动生成其值。URL Routing会将外部URL转换为内部的。通过这种方式,站点可以公开SEO友好的URL,但却可以在内部使用不同的链接。这对于遗留站点来说非常有用。 我们应该使用Response.RedirectPermanent()方法而非Response.Redirect(),因为后者会生成一个临时的重定向,这导致搜索引擎在多个重定向之间跳跃,降低了页面的等级。Guthrie解释了RedirectPermanent()的工作方式: ASP.NET 4.0引入了一个全新的Response.RedirectPermanent(string url)辅助方法,可以通过HTTP 301(moved permanently)响应进行重定向。这样,搜索引擎和其他能够识别出永久重定向的user agents就会存储并使用与内容关联的新URL。这么做会为页面内容加上索引,同时提升搜索引擎对页面的PR(Page Ranking)值。 ASP.NET 4.0输出缓存 自从1.0开始,ASP.NET就拥有了一个输出缓存来存储页面和资源以提供更快的响应速度,但存储位置只能在内存中。ASP.NET 4.0提供了一个扩展点,可以在本地/远程磁盘、数据库、分布式缓存引擎(如velocity、memcached)甚至是云中增加多个缓存。 转自:51cto.com 原文标题:三方面诠释.NET 4.0的新特性
View Details1、在.net中,windows服务的实现类必需继承于System.ServiceProcess.ServiceBase public partial class myService : ServiceBase { } 2、在windows服务的实现类的构造函数中进行必要的初始化工作,如设置系统标识服务的简短名称等。 public partial class myService : ServiceBase { public SqlBackupService() { ServiceName = "Myservice"; AutoLog = false; CanStop = true; } } 3、重写OnStar和OnStop函数,在OnStar里实现具体功能,OnStop中释放OnStat中创建的资源。 public partial class myService : ServiceBase { private int tickcount = 0; private System.Timers.Timer t = null; public SqlBackupService() { ServiceName = "Myservice"; AutoLog = false; CanStop = true; } protected override void OnStart(string[] args) { Console.WriteLine("Myservice start …"); //建立定时器 t = new System.Timers.Timer(10000); t.AutoReset = true; //每隔10000毫秒触发一次 t.Elapsed += new System.Timers.ElapsedEventHandler(myWork); t.Start(); […]
View Details_ _ DbType 说明 OleDbType 说明 SqlDbType 说明 Boolean 简单类型,表示 true 或 false 的布尔值。 Boolean 布尔值 (DBTYPE_BOOL)。它映射到 Boolean。 Bit Boolean。无符号数值,可以是 0、1 或 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。 SByte 整型,表示值介于 -128 到 127 之间的有符号 8 位整数。 TinyInt 8 位带符号的整数 (DBTYPE_I1)。它映射到 SByte。 Byte 一个 8 位无符号整数,范围在 0 到 255 之间。 UnsignedTinyInt 8 位无符号整数 (DBTYPE_UI1)。它映射到 Byte。 TinyInt Byte。8 位的无符号整数。 Int16 整型,表示值介于 -32768 到 32767 之间的有符号 16 位整数。 SmallInt 16 位带符号的整数 (DBTYPE_I2)。它映射到 Int16。 SmallInt Int16。16 位的有符号整数。 Int32 整型,表示值介于 -2147483648 到 2147483647 之间的有符号 […]
View Details
1 |
<ol class="dp-c"><li class="alt"><span><span>1.通过HttpWebResponse 来获取 </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">string</span><span> CheckTeamSiteUrl(</span><span class="keyword">string</span><span> url) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">string</span><span> response = </span><span class="string">""</span><span>; </span></span></li><li class="alt"><span> HttpWebResponse httpResponse = <span class="keyword">null</span><span>; </span></span></li><li><span> </span></li><li class="alt"><span> <span class="comment">//assert: user have access to URL </span><span> </span></span></li><li><span> <span class="keyword">try</span><span> </span></span></li><li class="alt"><span> { </span></li><li><span> HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); </span></li><li class="alt"><span> httpRequest.Headers.Set(<span class="string">"Pragma"</span><span>, </span><span class="string">"no-cache"</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span> <span class="comment">// request.Headers.Set("KeepAlive", "true"); </span><span> </span></span></li><li><span> </span></li><li class="alt"><span> httpRequest.CookieContainer = <span class="keyword">new</span><span> CookieContainer(); </span></span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span> httpRequest.Referer = url; </span></li><li><span> </span></li><li class="alt"><span> httpRequest.UserAgent = <span class="string">"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"</span><span>; </span></span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span> httpRequest.Credentials = System.Net.CredentialCache.DefaultCredentials; </span></li><li><span> httpResponse = (HttpWebResponse)httpRequest.GetResponse(); </span></li><li class="alt"><span> </span></li><li><span> } </span></li><li class="alt"><span> <span class="keyword">catch</span><span> (Exception ex) </span></span></li><li><span> { </span></li><li class="alt"><span> <span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> ApplicationException(</span><span class="string">"HTTP 403 Access denied, URL: "</span><span> + url, ex); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">//if here, the URL is correct and the user has access </span><span> </span></span></li><li class="alt"><span> <span class="keyword">try</span><span> </span></span></li><li><span> { </span></li><li class="alt"><span> <span class="keyword">string</span><span> strEncod = httpResponse.ContentType; </span></span></li><li><span> StreamReader stream; </span></li><li class="alt"><span> <span class="keyword">if</span><span> (strEncod.ToLower().IndexOf(</span><span class="string">"utf"</span><span>) != -1) </span></span></li><li><span> { </span></li><li class="alt"><span> stream = <span class="keyword">new</span><span> StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.UTF8); </span></span></li><li><span> } </span></li><li class="alt"><span> <span class="keyword">else</span><span> </span></span></li><li><span> { </span></li><li class="alt"><span> stream = <span class="keyword">new</span><span> StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.Default); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">char</span><span>[] buff = </span><span class="keyword">new</span><span> </span><span class="keyword">char</span><span>[4000]; </span></span></li><li class="alt"><span> stream.ReadBlock(buff,0,4000); </span></li><li><span> response = <span class="keyword">new</span><span> </span><span class="keyword">string</span><span>(buff); </span></span></li><li class="alt"><span> stream.Close(); </span></li><li><span> httpResponse.Close(); </span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">catch</span><span> (Exception ex) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> ApplicationException(</span><span class="string">"HTTP 404 Page not found, URL: "</span><span> + url, ex); </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">return</span><span> response; </span></span></li><li class="alt"><span> </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li> </li><li><span>2.通过 WebResponse 来获取 </span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">string</span><span> getPage(String url) </span></span></li><li><span> { </span></li><li class="alt"><span> WebResponse result = <span class="keyword">null</span><span>; </span></span></li><li><span> <span class="keyword">string</span><span> resultstring = </span><span class="string">""</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">try</span><span> </span></span></li><li><span> { </span></li><li class="alt"><span> WebRequest req = WebRequest.Create(url); </span></li><li><span> req.Timeout = 30000; </span></li><li class="alt"><span> result = req.GetResponse(); </span></li><li><span> Stream ReceiveStream = result.GetResponseStream(); </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">//read the stream into a string </span><span> </span></span></li><li class="alt"><span> <span class="comment">//StreamReader sr = new StreamReader(ReceiveStream, System.Text.Encoding.UTF8); </span><span> </span></span></li><li><span> <span class="keyword">string</span><span> strEncod = result.ContentType; </span></span></li><li class="alt"><span> StreamReader sr; </span></li><li><span> <span class="keyword">if</span><span> (strEncod.ToLower().IndexOf(</span><span class="string">"utf"</span><span>) != -1) </span></span></li><li class="alt"><span> { </span></li><li><span> sr = <span class="keyword">new</span><span> StreamReader(ReceiveStream, System.Text.Encoding.UTF8); </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">else</span><span> </span></span></li><li class="alt"><span> { </span></li><li><span> sr = <span class="keyword">new</span><span> StreamReader(ReceiveStream, System.Text.Encoding.Default); </span></span></li><li class="alt"><span> } </span></li><li><span> resultstring = sr.ReadToEnd(); </span></li><li class="alt"><span> js.alert(resultstring); </span></li><li><span> <span class="comment">//Console.WriteLine(resultstring); </span><span> </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">catch</span><span> </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(); </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">finally</span><span> </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">if</span><span> (result != </span><span class="keyword">null</span><span>) </span></span></li><li class="alt"><span> { </span></li><li><span> result.Close(); </span></li><li class="alt"><span> } </span></li><li><span> } </span></li><li class="alt"><span> <span class="keyword">return</span><span> resultstring; </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li> </li><li><span>3.通过WebClient来获取 </span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">string</span><span> </span><span class="keyword">get</span><span>(</span><span class="keyword">int</span><span> length) </span></span></li><li><span> { </span></li><li class="alt"><span> <span class="keyword">try</span><span> </span></span></li><li><span> { </span></li><li class="alt"><span> getEncodeing(); </span></li><li><span> WebClient wb = <span class="keyword">new</span><span> WebClient(); </span></span></li><li class="alt"><span> Stream response = wb.OpenRead(url); </span></li><li><span> StreamReader reader = <span class="keyword">new</span><span> StreamReader(response, </span><span class="keyword">this</span><span>.encoding, </span><span class="keyword">true</span><span>, 256000); </span></span></li><li class="alt"><span> <span class="keyword">char</span><span>[] a = </span><span class="keyword">new</span><span> </span><span class="keyword">char</span><span>[length]; </span></span></li><li><span> <span class="keyword">int</span><span> i = reader.Read(a,0,length); </span></span></li><li class="alt"><span> reader.Close(); </span></li><li><span> <span class="keyword">return</span><span> </span><span class="keyword">new</span><span> </span><span class="keyword">string</span><span>(a); </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">catch</span><span> (Exception e) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">return</span><span> e.Message; </span></span></li><li class="alt"><span> <span class="comment">//return null; </span><span> </span></span></li><li><span> } </span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">void</span><span> getEncodeing() </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">switch</span><span> (</span><span class="keyword">this</span><span>.encode) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">case</span><span> </span><span class="string">"UTF-8"</span><span>: encoding = Encoding.UTF8; </span><span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">case</span><span> </span><span class="string">"GB2312"</span><span>: encoding = Encoding.GetEncoding(</span><span class="string">"GB2312"</span><span>); </span><span class="keyword">break</span><span>; </span></span></li><li><span> <span class="keyword">case</span><span> </span><span class="string">"ASCII"</span><span>: encoding = Encoding.ASCII; </span><span class="keyword">break</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">default</span><span>: encoding = Encoding.GetEncoding(encode); </span><span class="keyword">break</span><span>; </span></span></li><li><span> } </span></li><li class="alt"><span> } </span></li></ol> |
FROM http://blog.sina.com.cn/s/blog_758087190100rfri.html
View Details<add key="MySqlString" value="server=localhost;port=3306;user id=userid;password=123456;database=dbname;CharSet=utf8;Allow Zero Datetime=true"/>
View Details今天在项目中一个页面使用 System.Web.UI.ScriptManager.RegisterStartupScript(this, GetType(), "js", "alert('OK');", true);的时候发现没用,检查发现脚本没用注册到页面, check页面发现了问题,<form method="post"> 没用ruanat,更详细的信息请参看MSDN关于这个方法参数的介绍
View DetailsVS2010安装项目的系统必备中没有.NET 2.0,不过我们可以从VS2008的程序文件中找到 .NET 2.0 的系统必备安装包。 安装了VS2008 的 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages 下的 DotNetFX 文件夹,就是 .NET 2.0 的系统必备安装包。把 DotNetFX 文件夹复制到安装了 VS2010 的 C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages下,然后在VS2010中就可以选择 .NET 2.0 的系统必备了。 原文:http://www.cnblogs.com/anjou/archive/2011/05/08/2040675.html
View Details1.把数据绑定到CheckBoxList中 protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){SqlConnection con = GetDBCon.GetCon();con.Open();SqlDataAdapter sda = new SqlDataAdapter("select * from admin", con);DataSet ds = new DataSet();sda.Fill(ds,"admin");this.CheckBoxList1.DataSource = ds.Tables[0];this.CheckBoxList1.DataTextField = "username";//绑定的字段名this.CheckBoxList1.DataValueField = "userid";//绑定的值this.CheckBoxList1.DataBind(); }} 2.循环读取出来 protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e){this.Lab2.Text = "";for (int i = 0; i < CheckBoxList1.Items.Count; i++){if (this.CheckBoxList1.Items[i].Selected){this.Lab2.Text = this.Lab2.Text+CheckBoxList1.Items[i].Text+".";}}} #region 设置或者得到CheckBoxList选中了的值 /**//// <summary> /// 初始化CheckBoxList中哪些是选中了的 /// </summary> /// <param name="checkList">CheckBoxList</param> /// <param name="selval">选中了的值串例如:"0,1,1,2,1"</param> /// <param name="separator">值串中使用的分割符例如"0,1,1,2,1"中的逗号</param> public static string SetChecked(CheckBoxList checkList,string selval,string separator) …{ selval = separator + selval + separator; //例如:"0,1,1,2,1"->",0,1,1,2,1," for(int i=0; i<checkList.Items.Count; i++) …{ […]
View Details