标签:stack-trace wcf c net
我们有一个C#日志记录类,它使用System.Diagnostics.StackTrace和StackFrame获得有关调用logger.writeLine()的文件名,行号,类和方法的信息,然后将其插入日志消息中.
我们已经在控制台应用程序,Windows服务,.aspx Web应用程序和.asmx Web服务中使用了它,而没有出现问题.
我现在正在研究由IIS托管的WCF服务,并且发现有些奇怪.
如果将logger.writeLine()放入ServiceBehavior类的构造函数中,它将获得以下代码:
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(true);
System.Diagnostics.StackFrame sf = st.GetFrame(2);
第一行似乎返回null.或者,至少,第二个引发NullReferenceException.
现在这很奇怪.仅当我在IIS中托管Web服务时才会发生这种情况.当我在Visual Studio的开发服务器中运行时,我没有任何问题.
即使在IIS中,我也只能在构造函数中遇到问题.在OperatioonContract方法以及从它们调用的方法中,对logger.writeLine()的调用都可以正常工作.只有在构造函数中,并且只有在由IIS托管时,才有问题.
如果我在logger.writeLine()中绕过try / catch,以便在发生异常的情况下,仅在日志文件中不包含行信息,则一切正常.或者我不能只在构造函数中使用日志记录-我在构造函数中所做的唯一一件事就是记录构造函数已被调用.所以我实际上没有问题.
但是我想知道发生了什么,我偶然发现了.NET的哪个奇怪角落.当我遇到像这样的怪异现象,并且发现可以解决这些怪异现象的变通方法时,有一半的时间我还没有注意到其他一些问题.
那么,有人对为什么会发生这种情况有任何解释吗?
解决方法:
在IIS下运行时,您没有权限在自己的程序集外部(位于堆栈上方)检查代码.
无论如何,您可以通过查看st.FrameCount轻松地使代码成为条件代码.
标签:stack-trace,wcf,c,net 来源: https://codeday.me/bug/20191202/2086264.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。