Tag: exception处理

当我尝试获取类型的计数时,为什么LINQ查询会抛出exception

public readonly IEnumerable PeriodToSelect = new string[] { “MONTH” }; var dataCollection = from p in somedata from h in p.somemoredate where h.Year > (DateTime.Now.Year – 2) where PeriodToSelect.Contains(h.TimePeriod) select new { p.Currency, h.Year.Month, h.Value }; 有人可以告诉我为什么在下面的代码行中抛出exception? int count = dataCollection.Count(); 这是例外: System.NullReferenceException: Object reference not set to an instance of an object. at System.Linq.Enumerable.d__31`3.MoveNext() […]

ServiceHost仅支持类服务类型

我有一个名为WcfService2的服务(原件我知道),它有一个带有公共接口的IService.cs文件: namespace WcfService2 { [ServiceContract] public interface IService1 { [OperationContract] [WebGet(UriTemplate = “/{value}”)] string GetData(string value); } } 然后我有我的公共类Service1.svc.cs文件,它返回值的字符串,如下所示: namespace WcfService2 { public class Service1 : IService1 { public string GetData(string value) { return string.Format(“You entered: {0}”, value); } } } 我现在正尝试使用如下控制台应用程序来托管此服务: namespace Host { class Program { static void Main(string[] args) { WebHttpBinding binding […]

Windows服务中的exception处理最佳实践?

我目前正在编写一个完全在后台运行的Windows服务,每天都会做一些事情。 我的想法是服务应该非常稳定,所以如果出现问题,它应该不会停止,但是第二天再次尝试,当然还要记录exception。 你能告诉我如何制作真正稳定的Windows服务的最佳实践吗? 我已经阅读了Scott Hanselman关于exception处理最佳实践的文章 ,他写道,只有少数情况下你应该吞下一个例外。 我认为Windows服务是少数情况之一,但我很乐意得到一些确认。

无限循环使TimeManager无效

我在WPF应用程序中遇到了一个非常棘手的缺陷,需要跟踪。 错误消息是: 在布局/渲染过程中反复使TimeManager失效会导致无限循环。 堆栈跟踪(它的价值)是: 在MS的System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback,Object args,Int32 numArgs)的System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)中的System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)处.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler) 这是一个间歇性的缺陷,我唯一可以捕获它的地方是在app配置文件中,我正在捕获Application_DispatcherUnhandledException消息。 我在我的应用程序中拥有的所有内容都包含在try catch块中,但是这些内容会在捕获未处理的exception的地方结束。 有没有人对此有任何见解? 我在互联网上搜索了一些东西并且没有发现任何东西,并且想到这里可能有人可能有一些见解或想法如何追踪这一点。 目前,我正在吞下这个exception并让应用程序继续运行,因为它似乎对它没有任何影响(除了崩溃)。

为什么后台线程中未处理的exception不会导致应用程序域崩溃?

我完全不解。 如果在我从未测试过的线程中有未捕获的exception,我非常确定.NET会关闭整个应用程序域。 但是我只是尝试了下面的代码并且它没有失败…任何人都可以解释为什么? (在.NET 4和3.5中尝试过) static void Main(string[] args) { Console.WriteLine(“Main thread {0}”, Thread.CurrentThread.ManagedThreadId); Action a = new Action(() => { Console.WriteLine(“Background thread {0}”, Thread.CurrentThread.ManagedThreadId); throw new ApplicationException(“test exception”); }); a.BeginInvoke(null, null); Console.ReadLine(); }

如何“全局”捕获对象实例中抛出的exception

我目前正在编写一个winforms应用程序(C#)。 我正在使用企业库exception处理块,遵循我所看到的相当标准的方法。 IE:在Program.cs的Main方法中,我将事件处理程序连接到Application.ThreadException事件等。 这种方法运行良好,可以处理应用程序exception情况。 在我的一个业务对象中,我在其中一个对象属性的Set访问器中抛出了各种exception set { if (value > MaximumTrim) throw new CustomExceptions.InvalidTrimValue(“The value of the minimum trim…”); if (!availableSubMasterWidthSatisfiesAllPatterns(value)) throw new CustomExceptions.InvalidTrimValue(“Another message…”); _minimumTrim = value; } 我对这种方法的逻辑(不将其转换为“何时抛出exception”讨论)只是业务对象负责检查业务规则约束并抛出可以冒泡并根据需要捕获的exception。 应该注意的是,在我的应用程序的UI中,我明确地检查公共属性被设置的值(并在那里显示友好的对话框等操作)但是抛出exception我也覆盖了我的业务对象的情况可能不被UI使用,例如:该属性正由另一个业务对象设置。 无论如何,我想你们都明白了。 我的问题是这些exception没有被连接到Application.ThreadException的处理程序捕获,我不明白为什么。 从其他阅读中我已经完成了Application.ThreadException事件,它处理“…捕获主GUI线程上发生的任何exception”。 是否在我的业务对象中引发exception而不是在此线程中? 我还没有创建任何新线程。 如果我按如下方式更新代码,我可以使用该方法,明确调用连接到Application.ThreadException的事件处理程序。 这是Enterprise Library示例中概述的方法。 然而,这种方法要求我包装try catch中抛出的任何exception,这是我试图通过使用“全局”处理程序来避免的。 try { if (value > MaximumTrim) throw new CustomExceptions.InvalidTrimValue(“The value of the minimum…”); if […]

捕获EngineExecutionException

我有一个包含托管代码和本机代码的应用程序。 应用程序当前有一个未处理的exceptionfilter,通过SetUnhandledExceptionFilter设置,它捕获任何严重错误,生成一个小型转储,记录各种应用程序参数,并退出程序。 未处理的exception处理程序不会捕获在.NET运行时中发生的EngineExecutionException。 我们怀疑问题是由应用程序的本机部分导致的内存损坏。 问题是,当exception发生时,应用程序只是退出而没有跟踪。 当发生这种情况时,我们想记录一个小型转储。 有谁知道我们的应用程序如何安装一个能够捕获它的处理程序?

如何调试“我的类的类型初始化程序”引发exception“

我得到了exception: The type initializer for ‘my class’ threw an exception. 运行我的Web应用程序后在浏览器中。 由于这似乎是从视图(.aspx)生成的错误消息,因此我无法看到堆栈跟踪或此错误源的任何日志。 我已经阅读了一些网络,调试的一个解决方案是抛出一个TypeInitializationException ,然后查看内部exception以找出错误。 当我不知道用try / catch包围代码的位置时,我该怎么做?

如何在C#中格式化Exception的堆栈跟踪?

显示exception时(或更常见 – 当它转换为String时)显示堆栈跟踪。 我想要做的是更改此类跟踪中显示的源代码文件路径的格式。 具体来说,我想只保留文件名(没有完整路径)或仅显示以项目基本目录开头的路径部分。 通常不需要完整路径并使整个消息混乱。 我怎样才能做到这一点?

HttpWebRequest.GetResponse() – 哪些特定的状态代码会引发exception?

我一直在寻找一些关于此的明确文件,但没有找到任何运气。 基本上 – 问题是 – 从服务器返回的HTTP状态代码将HttpWebRequest.GetResponse()在执行类似的事情之后生成WebException吗? 具体来说 – 它会为状态200以外的任何其他内容生成WebException吗? 或者它只会生成一个WebException,例如400,404和500(为了参数)。 我想知道,因为我正在与之通信的服务器定义除了HTTP 200之外的其他任何东西作为错误条件返回 – 关键是,我可以依赖为200以外的任何其他东西生成WebException吗? (我现在编写了我的代码,以便它实际上每次检查返回状态代码以确保它是200 OK,如果不是,请采取适当的措施 – 但它之间有很多重复,以及WebException的catch块,我希望能把它清理干净……) 任何与文档相关的链接都将非常受欢迎。 谢谢!