我有这个内置错误报告的面向消费者的应用程序。
有时我会收到the remote name could not be resolved
等异常的错误报告
例如google.com等主机名。
这显然不是我的应用程序中的问题,而是在用户端。
我如何在我的应用程序中对某些例外进行分类,而不是提供发送错误报告,显示一个对话框,建议用户检查他/她的某些事情。 还要考虑用户具有本地化.NET框架安装的事实。 (其语言中的错误消息)
编辑:这不是关于将SQLException
与WebException
分开的问题,更多的是如何从WebException remote name could not be resolved
确定类型为The operation has timed-out
的WebException。< / p>
答案 0 :(得分:2)
对于WebException,您可以确定错误是HTTP错误(即:404)还是不使用“Status”属性。
catch (WebException ex)
{
if (ex.Status != WebExceptionStatus.ProtocolError)
// in this case it was probably a connection issue
}
您可以在WebExceptionStatus枚举here上找到更多详细信息。
答案 1 :(得分:1)
答案 2 :(得分:0)
您希望将try / catch语句与多个catch块一起使用:
try { ... connect... }
catch(SocketException ex) {
switch(ex.ErrorCode)
{
case 123: ....
default: ....
}
}
catch(WebException ex) {
if(ex.InnerException is SocketException)
{
switch(((SocketException)ex.InnerException).ErrorCode)
{
case 123: ....
default: ....
}
}
switch(ex.Status)
{
case 500: ....
default: ....
}
}
....
catch(Exception ex) { .... something unforeseen, send error report .... }
基本上,这些异常中的每一个都应包含属性中的其他信息,您可以在不依赖字符串比较的情况下进行检查。
答案 3 :(得分:0)
尽可能按类型捕获异常(如果需要,则为innerexception) 要么 如果没有足够的特异性输入,另外检查消息或任何其他异常详细信息(错误代码/数字/等) 然后 通过触发正确的面向用户的对话框来适当处理这种情况。
函数的一些伪代码:
public UserError DoStuff()
{
try
{
// some web code
// some sql code
}
catch (WebException webEx)
{
if (webEx.Message.Contains("SSL"))
{
return new UserError { Type = ErrorType.SSL };
}
return new UserError { Type = ErrorType.Web };
}
catch (SqlException sqlEx)
{
return new UserError { Type = ErrorType.SQL };
}
}