Questions tagged «exception-handling»

异常是一种异常情况,需要偏离程序的正常流程。通常,异常不应导致完全失败,而应由异常处理程序来处理。异常处理是许多编程语言中的内置构造。通常,通过展开堆栈来处理异常,从而回滚到异常范围之外的已定义状态,然后调用处理程序块或例程。

16
服务具有零个应用程序(非基础结构)端点
我最近创建了WCF服务(dll)和服务主机(exe)。我知道我的WCF服务正常运行,因为我能够成功将服务添加到WcfTestClient。 但是,当我从服务主机(exe)中使用WCF时似乎遇到了一个问题。我可以将对WCF(dll)的引用添加到我的服务主机(exe),并为exe创建必要的组件。例如服务安装程序,服务主机和app.config,然后使用InstallUtil编译并最终安装exe。但是,当我尝试在Microsoft管理控制台中启动服务时,该服务在启动后立即停止。 因此,我开始研究到底是什么引起了该问题,并从事件查看器中的应用程序日志中发现了此错误。 描述: 服务无法启动。System.InvalidOperationException:服务“服务”具有零个应用程序(非基础结构)端点。这可能是因为没有为您的应用程序找到配置文件,或者是因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中未定义端点。 该错误实际上是在OnStart;中产生的。我的exe的名称,当我执行此调用时ServiceHost.Open()。我见过很多帖子,其他人也遇到过这个问题,但是大多数(如果不是全部)都声称服务名称或合同;未指定名称空间和类名称。我在配置文件中检查了这两个条目;在exe和dll中,它们完全匹配。我在办公室里有其他人在我身后仔细检查,以确保我不会在某一时刻失明,但他们当然得出了与我相同的结论,即一切看起来都正确地指定了。我对现在发生的事情确实迷失了。有人可以帮我解决这个问题吗? 可能发生这种情况的另一件事是,从未读取过app.config。至少不是我认为应该读的书。这可能是问题吗?如果是这样,我该如何解决这个问题。再次,任何帮助将不胜感激。




24
封装Integer.parseInt()的好方法
我有一个项目,我们经常在其中Integer.parseInt()将String转换为int。当出现问题时(例如,String不是数字,而是字母a或其他),此方法将引发异常。但是,如果我到处都必须处理代码中的异常,这很快就会非常难看。我想将其放在一个方法中,但是,我不知道如何返回一个干净的值以表明转换出错。 在C ++中,我可以创建一个方法,该方法接受一个指向int的指针,并让该方法本身返回true或false。但是,据我所知,这在Java中是不可能的。我也可以创建一个包含true / false变量和转换后的值的对象,但这似乎也不理想。全局值也一样,这可能会给我带来多线程问题。 那么有没有一种干净的方法可以做到这一点?

5
在Android中设置全局未捕获异常处理程序的理想方法
我想为我的Android应用程序中的所有线程设置全局未捕获的异常处理程序。因此,在Application子类中,我将未实现的Thread.UncaughtExceptionHandler异常的实现设置为默认处理程序。 Thread.setDefaultUncaughtExceptionHandler( new DefaultExceptionHandler(this)); 在我的实现中,我试图显示一条AlertDialog显示适当的异常消息。 但是,这似乎不起作用。无论何时,任何未处理的线程都会引发异常,我得到了库存的OS默认对话框(“抱歉!-应用程序已停止-意外对话框”)。 为未捕获的异常设置默认处理程序的正确理想方法是什么?


8
如果不是,谁在调用Java Thread interrupt()方法?
我已经阅读并重新阅读了Java Concurrency in Practice,已经阅读了有关该主题的多个线程,已经阅读了IBM文章Dealing with InterruptedException,但是我根本不了解某些我认为可以打破的东西。分为两个问题: 如果我从来没有自己打过其他线程,什么会触发InterruptedException? 如果我从不使用自己的interrupt()中断其他线程(例如,因为我正在使用其他方式取消工作线程,例如毒药和while(!cancelled)样式循环[如在JCIP中所述),那那么InterruptedException是什么意思?抓到我该怎么办?关闭我的应用程序?

22
这可能是由于服务端点绑定未使用HTTP协议
我的WCF服务在本地计算机上运行良好。我将其放在服务器上,并且收到以下错误: 收到对http://xx.xx.x.xx:8200 / Services / WCFClient.svc的HTTP响应时发生错误 。这可能是由于服务端点绑定未使用HTTP协议。这也可能是由于服务器终止了HTTP请求上下文(可能是由于服务关闭了)。请参阅服务器日志以了解更多详细信息。 我已经进入了网址中的服务,并且可以正常工作。我为该函数所做的所有事情都是将一个字符串返回一个图像名称,因此传递的数据并不多。我已经跟踪了日志,它给了我相同的信息。这是我的客户端配置: <binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> <endpoint name="basicHttpBinding_IWCFClient" address="http://localhost:4295/Services/WCFClient.svc" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IWCFClient" behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior" contract="WCFClient.IWCFClient" /> …


10
如何在SQL Server中抛出相同的异常
我想在try块中重新抛出SQL Server中刚刚发生的相同异常。我可以抛出相同的消息,但我想抛出相同的错误。 BEGIN TRANSACTION BEGIN TRY INSERT INTO Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description) VALUES(@DomainName, @SubDomainId, @DomainCode, @Description) COMMIT TRANSACTION END TRY BEGIN CATCH declare @severity int; declare @state int; select @severity=error_severity(), @state=error_state(); RAISERROR(@@Error,@ErrorSeverity,@state); ROLLBACK TRANSACTION END CATCH RAISERROR(@@Error, @ErrorSeverity, @state); 该行将显示错误,但是我想要类似的功能。这会引发错误号为50000的错误,但是我希望我传递的错误号被抛出@@error, 我想在前端捕获此错误。 即 catch (SqlException ex) { if ex.number==2627 MessageBox.show("Duplicate …

8
为什么C#允许您“抛出null”?
有人问,在编写一些特别复杂的异常处理代码时,您是否需要确保异常对象不为null?我说,当然不是,但是后来决定尝试一下。显然,您可以抛出null,但是在某些地方它仍会变成异常。 为什么允许这样做? throw null; 在此摘要中,值得庆幸的是,“ ex”不为null,但是它可能会为空吗? try { throw null; } catch (Exception ex) { //can ex ever be null? //thankfully, it isn't null, but is //ex is System.NullReferenceException }


5
引发异常与返回函数中无?
在Python中的用户定义函数中,更好的做法是:raise异常或return None?例如,我有一个在文件夹中查找最新文件的函数。 def latestpdf(folder): # list the files and sort them try: latest = files[-1] except IndexError: # Folder is empty. return None # One possibility raise FileNotFoundError() # Alternative else: return somefunc(latest) # In my case, somefunc parses the filename 另一个选择是保留异常并在调用者代码中处理它,但我认为处理aFileNotFoundError比处理a更清楚IndexError。还是用其他名称重新引发异常是不好的形式吗?

4
为什么将“日志和抛出”视为反模式?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 这个问题是由围绕本文的讨论引发的,当时我没有得到任何好的答案。 如果不能以其他方式处理异常,为什么应该记录异常然后将其重新抛出(当然,保留原始堆栈跟踪)是一个坏主意呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.