蝈蝈俊.net

-- 用随笔来记录自己的技术感触
随笔 - 597, 评论 - 4064, 引用 - 276

导航

关于

这里是我的技术Blog,下一代CSDN社区Blog在 http://blog.csdn.net/ghj1976/

标签

每月存档

最新留言

  • re:学习笔记:7种结构型设计模式简单对比
    <p>最新在家创业系统 ----刚从国外引进,市场巨大。 ----在家可经营所有国家生意,事业规模宏大。 ----不需求人与说服;不用放厚脸皮去推销。 ----极小投资;零风险;成...
    by jackielongteng(注册) on 2009/6/14 13:43:56
  • re:作用域
    <p>☆                    &deg;∵☆       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
    by jackielongteng(注册) on 2009/6/14 13:03:25
  • re:Html标签嵌套对展示性能的影响
    <p><strong>所有的浏览器都按照你提到的浏览器解析Html规则来解析嘛?</strong></p>
    by Cola(注册) on 2009/6/12 23:07:28
  • re:Html5
    <p>目前来说,HTML5还只是一个梦想,呵呵:)</p>
    by 开心就好(注册) on 2009/6/11 16:31:54
  • re:多线程与SqlConnection.Close
    <p>好服月租型IT服务台,与你共成长! 月租型ITSM软件,注册即可免费体验! 详情请登录官方网站:<a href="http://www.servicezon.co...
    by qzhibo(注册) on 2009/6/3 15:14:21
  • re:多线程Singleton单件模式
    <pre><span style="color: #0000ff;">//Another way public</span> <sp...
    by Yaojian(注册) on 2009/4/22 14:02:35
  • re:Thread.Sleep(0)
    <p>学习了~</p>
    by shuitong888(注册) on 2009/4/8 14:29:24
  • re:Html标签嵌套对展示性能的影响
    <p>DIV固然好 但IE6,7,8 firefox,safari ....做美工的人要累死.</p>
    by ryq1(注册) on 2009/4/3 14:16:25
  • re:用.net 编码实现朗读文本的方法
    <p>我第一次 按键时 能听到声音,但是第二次按键时,没反应。网页一直在 loading.&nbsp;是什么原因?</p>
    by tracytang949(注册) on 2009/3/27 7:01:09
  • re:information_schema.routines与sysobjects
    <p>用sys.procedures多好。</p>
    by luke(注册) on 2009/3/16 16:45:49
  • re:SQL Server 2005 配置发送邮件
    <p>&lt;A href="<a href="http://www.3rt.info">http://www.3rt.info</...
    by ives007(注册) on 2009/2/26 16:47:00
  • re:推荐 Gemini 这个bug管理工具
    <p>你好!首先非常感谢推荐使用Gemini,这段时间在使用Gemini,有些问题想请教以下。</p> <p>1.Create Issue 以后,设置了Visib...
    by CowboyRyan(注册) on 2009/2/20 15:45:08
  • re:推荐 Gemini 这个bug管理工具
    <p>你好!首先非常感谢推荐使用Gemini,这段时间在使用Gemini,有些问题想请教以下。</p> <p>1.Create Issue 以后,设置了Visib...
    by CowboyRyan(注册) on 2009/2/20 15:32:06
  • re:虚机搭配NLB负载平衡时碰到"没有接口可用于安装新的群集"的解决方案
    <p>google newsid</p>
    by iads(注册) on 2009/2/13 17:25:07
  • re:try catch 与线程
    <p>确实是这样的。因为异常机制本质上是堆栈操作,而各线程的堆栈是独立的。</p>
    by st_szr(注册) on 2009/1/21 9:46:05
  • re:try catch 与线程
    <p>没啥啊,线程就是新启动了一个,当然异常不会影响到原有的线程了。</p> <p>你应该在线程里面合适的位置写上自己的捕获代码就行了。</p>
    by laozizhu(注册) on 2009/1/19 16:33:21
  • re:我的2008,征服天堂
    <p>蝈蝈,可惜我帮不了你啊!</p>
    by laozizhu(注册) on 2009/1/19 16:25:45
  • re:try catch 与线程
    <p>呃&hellip;&hellip;是这样的。可怎么处理呢?</p>
    by Anders Liu(注册) on 2009/1/19 11:58:05
  • re:我的2008,征服天堂
    <p>博主是不是去了师部 做了侦查营长呢?</p>
    by huobazi(注册) on 2009/1/9 14:15:33
  • re:我的2008,征服天堂
    <p>@ghj1976:看来真的危机了</p>
    by 开心就好(注册) on 2009/1/9 10:17:37
  • re: 网络带宽的单位
    不过传输的时候,往往还有压缩。
    by luke(匿名) on 2008/12/15 11:00:21
  • re: 网络带宽的单位
    除10不仅仅是为了方便,在传输中,往往加上控制位,所以一个字节往往需要10Bit.
    by 关门放狗(匿名) on 2008/12/13 16:01:30
  • re: 多缓存并存
    对跨进程甚至跨服务器缓存的性能比较怀疑,进程通信和跨服务器通信代价不菲。即使有已有进程外数据可用,如果考虑在进程做份缓存,定期再进程间同步是否更佳?
    by jinglecat(匿名) on 2008/12/12 18:00:05
  • re: 网络带宽的单位
    好像还有一个为了方便换算,厂家使用的是 除10的处理方式的说法:于是100Mb/sec = 100M / 10 = 10M Byte/sec 所以我通常都是用除10而不是除8来做运算的。
    by kentliu(匿名) on 2008/12/11 11:38:55
  • re: 网络带宽的单位
    又不是大S小s
    by luke(匿名) on 2008/12/10 12:04:50

广告

 

下面分几种情况来看.net中,默认是那个配置文件起作用。

情况1:

如果是一个标准的Win独立应用,或者一个标准的WEB独立应用,就不用说了,大家都知道。
配置文件定义配置信息
用下面代码,简单读取配置信息。
using System.Configuration;
string ww = ConfigurationSettings.AppSettings["SQLConnString"];
// 或者其他 ConfigurationSettings 类的方法获得配置信息

情况2:

如果是一个需要被Win程序调用的DLL组件,
配置信息放在调用它的Win程序的配置文件(app.config)中,
调用代码仍然是情况1简单的那两行调用代码。

情况3:

如果是一个需要被WEB程序调用的DLL组件,
配置信息放在调用它的WEB程序的配置文件(web.config)中,
调用代码仍然是情况1简单的那两行调用代码。

情况4:

如果你编写的是一个独立的Win的服务,
跟情况1完全一样,
把配置信息文件放到Win服务项目中。
Win服务中再用情况1上面的代码直接调用即可。

情况5:

如果是一个组件,被Win服务所调用,
跟情况2、3完全一样,
把配置信息文件放到Win服务项目中。
组件中,再用情况1上面的代码直接调用即可。

情况6:

如果你编写的是一个独立的Com+企业应用。并且这个Com+应用激活模式是“库应用程序”,组件将在创建者进程中被激活。
跟情况 2、3、5 类似,这时候的Com+就可以认为是一个组件。
把配置信息文件放到调用这个Com+的项目中。
这个COM+中,用情况1上面的代码直接调用即可。

分析以上几种情况:
起作用的配置文件其实是当前应用程序域的配置文件,.net 组件的作用域是调用它的Win程序或者WEB程序或者Win服务等等。组件的配置信息也应该是在这些主程序的配置文件中配置。
你可以在代码中通过AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
这个代码,获得当前起作用的配置文件。

情况7:

如果你编写的是一个独立的Com+企业应用。并且这个Com+应用激活模式是“服务器应用程序”,组件将在专用服务器进程中被激活。
即这样的配置 [assembly: ApplicationActivation(ActivationOption.Server) ]
这时候,麻烦来了,
我们用 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 获得的是当前有效配置文件是
C:\WINDOWS\system32\dllhost.exe.config
这个文件默认并不存在,我们自己手工创建这个文件,并把配置信息写到这个文件中。
Debug 程序,我们仍看会看到“未将对象引用设置到对象的实例。”这样的异常产生。
以上我们得出的结论并不适用这个情况。

解决方法:

参看:
http://dotnet.org.za/armand/archive/2004/05/30/1917.aspx
http://blogs.msdn.com/florinlazar/archive/2003/12/04/41369.aspx

在未打过补丁的WINXP或者2003中确实有这个问题,在打过补丁的WINXP或者2003中,需要一些额外的操作,才可以使用ConfigurationSettings

请依次如下步骤:
1、给COM+ Server Application指定一个Application Root Directory(在Activation Tab下)即: “应用程序根目录”
比如是 F:\MyDevelop\Temp\COMPLUSTest\COMConfigTest\bin\Debug 目录

2、然后在这个目录下创建一个 application.manifest 文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>



3、然后再创建一个 application.config 文件
这个文件里面就是你要配置的具体内容,跟其他配置文件没有差别。

这时候你在执行这个COM+程序,
COM+内执行
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
返回的就是
F:\MyDevelop\Temp\COMPLUSTest\COMConfigTest\bin\Debug\Application.Config
获得配置信息也没有问题了。

注意这个必须是打过补丁的。


继续分析原因:

以下只是我的怀疑:
微软的Com+并不是一个彻头彻尾的.net应用,里面有大量的非托管代码。
问题就产生在这里,非托管代码中,并没有应用程序域与应用程序域的配置文件的概念。
于是乎,第七种情况就产生了。

如果没打过补丁的,解决方法,就是把配置文件的路径作为一个参数传递进Com+。
打过补丁的就是上面说的方法。

另外,如果你的程序是完全意义上的.net程序(也就是不是上述第7中情况)
你是可以修改一个应用程序的默认配置文件的。
具体请看参MSDN中关于
AppDomainSetup.ConfigurationFile 属性  和 IAppDomainSetup.ConfigurationFile 属性 的描述和演示代码。

配置文件描述应用程序域的搜索规则和配置数据。创建应用程序域的宿主负责提供此数据,因为有意义的值因情况不同而异。
例如,ASP.NET 应用程序的配置数据针对每个应用程序、站点和计算机进行存储,而可执行文件的配置数据针对每个应用程序、用户和计算机进行存储。只有宿主知道针对特定情况的配置数据的细节。
当 AppDomain 完成它的第一次绑定后,此属性不得更改。
参见:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemappdomainsetupclassconfigurationfiletopic.asp

手工配置应用程序配置文件的范例可以参看下面一篇文章中提到的代码:
Executing ASMX files without a web server
http://radio.weblogs.com/0105476/stories/2002/10/24/executingAsmxFilesWithoutAWebServer.html
http://www.gotdotnet.com/team/clr/AppdomainFAQ.aspx

或者看下面的代码:

AppDomainSetup info = new AppDomainSetup(); info.ApplicationBase = "file:///" + System.Environment.CurrentDirectory; info.ConfigurationFile = "C:\\Program Files\\MyApp\\MyApp.exe.config"; AppDomain dom = AppDomain.CreateDomain("RemoteDomain", null, info); dom.ExecuteAssembly("HelloWorld1.exe"); AppDomain.Unload(dom);
情况8
服务器进程中被激活的COM+程序中调用组件。组件的做法。
如果你看了前面几种方式,这种方式就知道如何应对了。
配置文件的方式看情况7
调用代码,跟情况1的代码完全一样。
其他情况待整理中,大家如果看到,请补充。

打印 | 张贴于 2005-03-10 11:41:00 | Tag:.net 编程心得  技术随笔

留言反馈

#回复: 使用 ConfigurationSettings 来读取配置信息 编辑
你好,在网上看到你的一篇文章,得知你正在写广告系统.想请教你几点:
.net程序怎么样结合js实现"那个时间显示那个广告,显示几次,或者那些广告组合"
望指教,不慎感激!!!
我的邮箱是:utmostkeb@gmail.com
2006-12-29 09:02:00 | [匿名用户:我考百试通]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
请高手指点一下.
谢谢
2006-09-13 17:38:00 | [匿名用户:home]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
ConfigurationSettings它诗读Web.config那个呢.
2006-09-13 17:36:00 | [匿名用户:home]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
缺少根元素。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Xml.XmlException: 缺少根元素。

源错误:


行 79: #endregion
行 80: StreamReader reader = new StreamReader(fs);
行 81: ds.ReadXml(reader);
行 82: fs.Close();
行 83: //新建立一个名称为users 的 DataTable


源文件: c:\inetpub\wwwroot\xmlauthenticationweb\login.aspx.cs 行: 81

堆栈跟踪:


[XmlException: 缺少根元素。]
System.Xml.XmlTextReader.Read() +876
System.Xml.XmlReader.MoveToContent() +75
System.Data.DataSet.ReadXml(XmlReader reader, Boolean denyResolving)
System.Data.DataSet.ReadXml(TextReader reader)
XmlAuthenticationWeb.Login.btnSubmit_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\xmlauthenticationweb\login.aspx.cs:81
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain() +1277



2006-05-16 10:06:00 | [匿名用户:11]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
一个标准的Win独立应用的配置文件名应该是什么,放在什么地方?
2006-05-12 16:39:00 | [匿名用户:ggy]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
服务器无法处理请求。--》超时时间已经,在从池中获取连接之前超过时间已过,出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。

关注ING。。。VB。NET
2006-05-11 14:04:00 | [匿名用户:coocooYa]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。

源错误:


行 63: strConn="server=HT-08;database=HGis_HJJC;uid=sonyejin;password=sonyejin;";
行 64: SqlConnection objConn=new SqlConnection(strConn);
行 65: objConn.Open();
行 66: return objConn;
行 67: }


源文件: c:\inetpub\wwwroot\nuclear\hjjc\class1.cs 行: 65

堆栈跟踪:


[InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。]
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
System.Data.SqlClient.SqlConnection.Open()
HJJC.Class1.OpenData() in c:\inetpub\wwwroot\nuclear\hjjc\class1.cs:65
HJJC.Class1.CheckLength(TextBox txt, String str, String str1) in c:\inetpub\wwwroot\nuclear\hjjc\class1.cs:118
HJJC.WorkPlace.WebCustomControl11_CheckOut(Object sender, EventArgs e) in c:\inetpub\wwwroot\nuclear\hjjc\workplace.aspx.cs:511
HEAD.WebCustomControl1.img6_Click(Object sender, ImageClickEventArgs e) in C:\Inetpub\wwwroot\nuclear\HEAD\WebCustomControl1.cs:484
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e)
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()



那位大虾 解决一下阿,C#
2006-03-06 16:13:00 | [匿名用户:sonyejin]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。

源错误:


行 63: strConn="server=HT-08;database=HGis_HJJC;uid=sonyejin;password=sonyejin;";
行 64: SqlConnection objConn=new SqlConnection(strConn);
行 65: objConn.Open();
行 66: return objConn;
行 67: }


源文件: c:\inetpub\wwwroot\nuclear\hjjc\class1.cs 行: 65

堆栈跟踪:


[InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。]
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
System.Data.SqlClient.SqlConnection.Open()
HJJC.Class1.OpenData() in c:\inetpub\wwwroot\nuclear\hjjc\class1.cs:65
HJJC.Class1.CheckLength(TextBox txt, String str, String str1) in c:\inetpub\wwwroot\nuclear\hjjc\class1.cs:118
HJJC.WorkPlace.WebCustomControl11_CheckOut(Object sender, EventArgs e) in c:\inetpub\wwwroot\nuclear\hjjc\workplace.aspx.cs:511
HEAD.WebCustomControl1.img6_Click(Object sender, ImageClickEventArgs e) in C:\Inetpub\wwwroot\nuclear\HEAD\WebCustomControl1.cs:484
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e)
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()



那位大虾 解决一下阿,C#
2006-03-06 16:13:00 | [匿名用户:sonyejin]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
我页出现了和楼上同样的情况
但是我就只有一个用户(我自己)啊.
2005-12-06 21:53:00 | [匿名用户:所有池连接都已被使用并已达到最大池大小]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。]
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +396
System.Data.SqlClient.SqlConnection.Open() +384
template.DbObject.DataTableRunSQL(String sql)
template.DataProvider.GetAllPublicBigKindID()
template.Business.GetAllPublicBigKindID()
template.Search.BindGrid()
template.Search.Page_Load(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +733




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2300; ASP.NET 版本:1.1.4322.2300
2005-09-04 19:20:00 | [匿名用户:erictang2003]
#re:使用 ConfigurationSettings 来读取配置信息 编辑
使用 ConfigurationSettings 来读取配置信息ooeess
2005-06-01 12:52:00 | [匿名用户:露点仪]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
呵呵!
2005-04-28 09:40:00 | [匿名用户: 红外热金属探测仪]
#re:使用 ConfigurationSettings 来读取配置信息 编辑
^_~,pretty good!
2005-04-22 13:17:00 | [匿名用户:移液系统]
#re:使用 ConfigurationSettings 来读取配置信息 编辑
^_^,Pretty Good!
2005-04-13 20:11:00 | [匿名用户:试验面条机]
#re:使用 ConfigurationSettings 来读取配置信息 编辑
^_^,Pretty Good!
2005-04-10 19:36:00 | [匿名用户:湿度测控仪]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
找不到官方的公开文档……没办法……
2005-03-10 14:27:00 | [匿名用户:Wang Ting]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
Application Root Directory 确实可以看到,但是我把哪里设置为其他目录后。

激活模式是“服务器应用程序”,Com+
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
返回的仍然是:
C:\WINDOWS\system32\dllhost.exe.config

仍然无法读取配置文件。
2005-03-10 13:37:00 | [匿名用户:ghj1976]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
to Wang Ting :

然后通过manifest给这个特定的Server Application一个单独的Application.config。

这个技术我不懂。哪里可以看到相关内容。thanks

2005-03-10 13:35:00 | [匿名用户:ghj1976]
#re: 使用 ConfigurationSettings 来读取配置信息 编辑
在更新过的Windows XP和Windows 2003上,我们可以给COM+ Server Application指定一个Application Root Directory(在Activation Tab下)。然后通过manifest给这个特定的Server Application一个单独的Application.config。
2005-03-10 13:11:00 | [匿名用户:Wang Ting]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8