无论你的程序写的多好,总无法避免产生异常。既然产生异常,那我们就应该去捕获它。在.Net CF中一些异常的类型和消息不足以描述问题的根源,那么,查看一下它是否有自定义属性可能会让你立刻知道到底是哪出了问题。
WebException:
可以根据其WebException.Status属性的类型来判断。该类型是WebExceptionStatus枚举,它有16种可能的值,足以描述错误。
成员名称
| 说明
|
Success | 未遇到任何错误。 |
NameResolutionFailure | 名称解析服务未能解析主机名。 |
ConnectFailure | 未能在传输级联系到远程服务点。 |
ReceiveFailure | 没有从远程服务器接收到完整响应。 |
SendFailure | 未能将完整请求发送到远程服务器。 |
PipelineFailure | 该请求是管线请求,并且连接未接收到响应即被关闭。 |
RequestCanceled | 请求被取消,WebRequest..::.Abort 方法被调用,或者发生了不可分类的错误。这是 Status 的默认值。 |
ProtocolError | 从服务器接收到的响应完成了,但它指示了一个协议级错误。例如,HTTP 协议错误(如 401 访问被拒绝)使用此状态。 |
ConnectionClosed | 连接被过早关闭。 |
TrustFailure | 未能验证服务器证书。 |
SecureChannelFailure | 使用 SSL 建立连接时发生错误。 |
ServerProtocolViolation | 此服务器响应不是有效的 HTTP 响应。 |
KeepAliveFailure | 指定 Keep-alive 标头的请求连接被意外关闭。 |
Pending | 内部异步请求挂起。 |
Timeout | 在请求的超时期限内未收到任何响应。 |
ProxyNameResolutionFailure | 名称解析服务未能解析代理主机名。 |
当然,你通过WebRequest创建一个请求后,你可以通过请求来获取HttpWebResponse。通过HttpWebResponse.StatusCode来判断当前错误,也可以得到一些精确的消息。
成员名称
| 说明
|
Continue | 等效于 HTTP 状态 100。Continue 指示客户端可能继续其请求。 |
SwitchingProtocols | 等效于 HTTP 状态 101。SwitchingProtocols 指示正在更改协议版本或协议。 |
OK | 等效于 HTTP 状态 200。OK 指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码。 |
Created | 等效于 HTTP 状态 201。Created 指示请求导致在响应被发送前创建新资源。 |
Accepted | 等效于 HTTP 状态 202。Accepted 指示请求已被接受做进一步处理。 |
NonAuthoritativeInformation | 等效于 HTTP 状态 203。NonAuthoritativeInformation 指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。 |
NoContent | 等效于 HTTP 状态 204。NoContent 指示已成功处理请求并且响应已被设定为无内容。 |
ResetContent | 等效于 HTTP 状态 205。ResetContent 指示客户端应重置(或重新加载)当前资源。 |
PartialContent | 等效于 HTTP 状态 206。PartialContent 指示响应是包括字节范围的 GET 请求所请求的部分响应。 |
MultipleChoices | 等效于 HTTP 状态 300。MultipleChoices 指示请求的信息有多种表示形式。默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。 |
Ambiguous | 等效于 HTTP 状态 300。Ambiguous 指示请求的信息有多种表示形式。默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。 |
MovedPermanently | 等效于 HTTP 状态 301。MovedPermanently 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。 |
Moved | 等效于 HTTP 状态 301。Moved 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
Found | 等效于 HTTP 状态 302。Found 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
Redirect | 等效于 HTTP 状态 302。Redirect 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
SeeOther | 等效于 HTTP 状态 303。作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 |
RedirectMethod | 等效于 HTTP 状态 303。作为 POST 的结果,RedirectMethod 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 |
NotModified | 等效于 HTTP 状态 304。NotModified 指示客户端的缓存副本是最新的。未传输此资源的内容。 |
UseProxy | 等效于 HTTP 状态 305。UseProxy 指示请求应使用位于 Location 头中指定的 URI 的代理服务器。 |
Unused | 等效于 HTTP 状态 306。Unused 是未完全指定的 HTTP/1.1 规范的建议扩展。 |
TemporaryRedirect | 等效于 HTTP 状态 307。TemporaryRedirect 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 |
RedirectKeepVerb | 等效于 HTTP 状态 307。RedirectKeepVerb 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 |
BadRequest | 等效于 HTTP 状态 400。BadRequest 指示服务器未能识别请求。如果没有其他适用的错误,或者如果不知道准确的错误或错误没有自己的错误代码,则发送 BadRequest。 |
Unauthorized | 等效于 HTTP 状态 401。Unauthorized 指示请求的资源要求身份验证。WWW-Authenticate 头包含如何执行身份验证的详细信息。 |
PaymentRequired | 等效于 HTTP 状态 402。保留 PaymentRequired 以供将来使用。 |
Forbidden | 等效于 HTTP 状态 403。Forbidden 指示服务器拒绝满足请求。 |
NotFound | 等效于 HTTP 状态 404。NotFound 指示请求的资源不在服务器上。 |
MethodNotAllowed | 等效于 HTTP 状态 405。MethodNotAllowed 指示请求的资源上不允许请求方法(POST 或 GET)。 |
NotAcceptable | 等效于 HTTP 状态 406。NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。 |
ProxyAuthenticationRequired | 等效于 HTTP 状态 407。ProxyAuthenticationRequired 指示请求的代理要求身份验证。Proxy-authenticate 头包含如何执行身份验证的详细信息。 |
RequestTimeout | 等效于 HTTP 状态 408。RequestTimeout 指示客户端没有在服务器期望请求的时间内发送请求。 |
Conflict | 等效于 HTTP 状态 409。Conflict 指示由于服务器上的冲突而未能执行请求。 |
Gone | 等效于 HTTP 状态 410。Gone 指示请求的资源不再可用。 |
LengthRequired | 等效于 HTTP 状态 411。LengthRequired 指示缺少必需的 Content-length 头。 |
PreconditionFailed | 等效于 HTTP 状态 412。PreconditionFailed 指示为此请求设置的条件失败,且无法执行此请求。条件是用条件请求标头(如 If-Match、If-None-Match 或 If-Unmodified-Since)设置的。 |
RequestEntityTooLarge | 等效于 HTTP 状态 413。RequestEntityTooLarge 指示请求太大,服务器无法处理。 |
RequestUriTooLong | 等效于 HTTP 状态 414。RequestUriTooLong 指示 URI 太长。 |
UnsupportedMediaType | 等效于 HTTP 状态 415。UnsupportedMediaType 指示请求是不支持的类型。 |
RequestedRangeNotSatisfiable | 等效于 HTTP 状态 416。RequestedRangeNotSatisfiable 指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。 |
ExpectationFailed | 等效于 HTTP 状态 417。ExpectationFailed 指示服务器未能符合 Expect 头中给定的预期值。 |
InternalServerError | 等效于 HTTP 状态 500。InternalServerError 指示服务器上发生了一般错误。 |
NotImplemented | 等效于 HTTP 状态 501。NotImplemented 指示服务器不支持请求的函数。 |
BadGateway | 等效于 HTTP 状态 502。BadGateway 指示中间代理服务器从另一代理或原始服务器接收到错误响应。 |
ServiceUnavailable | 等效于 HTTP 状态 503。ServiceUnavailable 指示服务器暂时不可用,通常是由于过多加载或维护。 |
GatewayTimeout | 等效于 HTTP 状态 504。GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。 |
HttpVersionNotSupported | 等效于 HTTP 状态 505。HttpVersionNotSupported 指示服务器不支持请求的 HTTP 版本。 |
SocketException:
通过ErrorCode属性获得详细信息。返回的是有系统的ErrorCode。这个只能查System Error Codes了。
SqlCeException:
错误存放在SqlCeErrorCollection中,需要对Errors属性进行迭代,返回SqlCeError对象,通过该对象的NativeError属性来获得错误号。有关这些错误的更多信息,请参见 SQL Server Mobile Books Online(《SQL Server Mobile 联机丛书》)。的“Troubleshooting”(疑难解答)一节中的“SQL Server Mobile Errors”(SQL Server Mobile 错误)。
可以参考黎波的《正确处理SqlCeException的方法》
InvaildOperationExceptio:
可能在调用一个方法时遇到这个情况,可以检查下该对象的状态。
MissingMethodException:
在PInvoke时常发生。它就是一个通过查看Message属性来确定问题的根源。
比如在当写错了一个dll时,就会报“无法找到PInvokeDLL”
当dll没错,函数名错误时,就会报“无法找到PInvokeDLL中的入口点”
MissingManifestResourceException:
不能正确得到资源名称,可以通过检查程序集,找到资源的正确名称。
TypeLoadException:
加载类型失败,运行需要的某个程序集在目标设备(程序文件夹中获全局程序集缓存中)不存在。