生成的服务引用会抛出什么exception?
我使用“添加服务引用…”在Visual Studio 2010中添加了一个Web服务。 这会在名为Reference.cs
的文件中生成一些代码。 现在,如果我调用其中一种方法,我就不知道该方法可能抛出的exception。 据推测,它可以抛出网络相关的exception,如SocketException
或IOException
?
可以在msdn或源代码内部检查.NET中的常规方法,以揭示可能抛出的exception,例如File.Open 。 这里很清楚我应该捕获哪些exception并重新抛出以在稍后阶段显示错误消息。
对于那些生成的方法,我怎么知道它们可能抛出的exception?
嗯,在这种情况下有“标准”例外,以及“自定义”例外(由服务开发人员定义为FaultContact
并出现在服务合同参考中)。
在第一种情况下,我认为你的担忧是CommunicationException
和TimeoutException
; 这些是ICommunicationObject.BeginOpen
和ICommunicationObject.BeginOpen
其他“开放”方法( 模型的基础 )的可能例外。 对于“关闭”方法,记录了CommunicationObjectFaultedException
。 发送消息的方法也有QuotaExceededException
,例如IRequestChannel.Request
。 在可能的更多内容中 ,这些应该是可以发现的。
值得注意的是,从上面链接的MSDN文章中可以看出:
通道抛出的所有exception必须是
System.TimeoutException
,System.ServiceModel.CommunicationException
或从CommunicationException派生的类型。 (也可能抛出ObjectDisposedException等exception,但仅表示调用代码滥用了通道。如果正确使用了通道,则必须抛出给定的exception。)
然后是“故障”,这是在服务端引发的exception,并且(可能,如果启用)详细给调用者,调用者可以处理它或抛出正确的客户端exception:
生成错误时,自定义通道不应直接发送错误,而是应抛出exception并让上面的层决定是否将该exception转换为错误以及如何发送它。
渠道State
提供了一个Faulted
事件,您可以订阅该事件,以便在达到此类状态时获得通知,并可能采取行动。 默认情况下(不配置抑制(?)),故障将作为托管exception引发; 再次重申:
在WCF客户端中,客户端应用程序感兴趣的通信期间发生的SOAP错误将作为托管exception引发。 虽然在执行任何程序期间可能会发生许多exception,但使用WCF客户端编程模型的应用程序可能会因通信而处理两种类型的exception。
这再次引用了上面提到的CommunicationException
和TimeoutException
。
最后,至少现在是出乎意料的:
当侦听器收到操作协定中未预期或指定的错误时,抛出
FaultException
exception; 通常,在调试应用程序并且服务将System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults
属性设置为true时会发生这种情况。上述就是C#学习教程:生成的服务引用会抛出什么exception?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1018382.html