Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 处理错误的更好方法_Vb.net_Error Handling - Fatal编程技术网

Vb.net 处理错误的更好方法

Vb.net 处理错误的更好方法,vb.net,error-handling,Vb.net,Error Handling,我最近将一个VB6应用程序迁移到VB.Net。将删除整个VB6依赖项。代码对于单个模块来说运行良好,也就是说,就像WinApp一样,它运行良好 现在我的要求已经更改,现在同一类将被多个应用程序访问,它可能是Windows应用程序、Web应用程序或Web服务。因此,我无法决定任何有效的错误处理模式 所以你们帮我。目前我正在做的是父函数,我将两个变量LogError作为bool传递,ErrorMessage作为string参数传递,这将进一步检查如下内容 Catch(ex as Exception)

我最近将一个VB6应用程序迁移到VB.Net。将删除整个VB6依赖项。代码对于单个模块来说运行良好,也就是说,就像WinApp一样,它运行良好

现在我的要求已经更改,现在同一类将被多个应用程序访问,它可能是Windows应用程序、Web应用程序或Web服务。因此,我无法决定任何有效的错误处理模式

所以你们帮我。目前我正在做的是父函数,我将两个变量LogError作为bool传递,ErrorMessage作为string参数传递,这将进一步检查如下内容

Catch(ex as Exception)
     If LogError then
          MessageBox.Show("My_Module_Name :" & ex.Message)
     EndIf
     ErrorMessage = ex.Message
End Try
在所有其他函数/子例程中也使用相同的catch块。
因此,我需要的是任何优雅的处理方法,它将在跨应用程序平台(win/web/service)上高效地工作。

我建议将消息记录到日志文件或事件日志中,但为什么不让客户端选择呢?因为您可以添加一些方法,让客户端决定应该记录在哪里。虽然没有让异常处理程序处理消息并将其放入errormessage变量中,我只是在日志记录之后抛出一个
throw
,以便
异常在调用链中继续向上,直到知道如何处理它的代码得到它


一般来说,捕获
异常是不好的做法,您应该只捕获可以处理的异常。但是我认为如果你只想记录它,然后再重新抛出它就可以了。

除了写入文件或错误日志之外,还值得注意的是,异常类是可序列化的,可以序列化并存储到数据库。如果我是对的,那么你想说ABC是我应用程序的核心类,由多个不同的客户端访问。公共类ABC公共子XYZ()Try.statements。。。。。Catch(ex as Exception)Throw ex End Try End函数End Class Client 1(WinForm)Protected void btnSave_Click(Object sender,EventArgs e){ABC ABC=new ABC();Try{ABC.XYZ();}Catch(Exception ex){//记录或显示}我希望,我很清楚,如果你不打算在XYZ异常处理程序中做任何事情,只需删除它,因为这只是浪费空间,如果我真的要在那里做日志记录,我会保留它。你应该尽量避免在btnSave中执行catch(Exception),而是处理你可以处理的异常(例如,如果由于无法访问而失败,也许你可以告诉用户选择不同的目录进行保存或类似操作)。我将在这里添加一条注释,使其从下面较长的注释中脱颖而出。请注意,
throw ex
throw
不同。通常情况下,您只想单独使用
throw
,否则会丢失信息,下面是一个包含更多详细信息的链接: