What exceptions may a generated service reference throw?

前端 未结 1 536
独厮守ぢ
独厮守ぢ 2021-02-14 14:36

I have added a web service in Visual Studio 2010 using the \"Add Service Reference...\". This generates some code in a file called Reference.cs. Now, if I call one

相关标签:
1条回答
  • 2021-02-14 15:10

    Well, there are 'standard' exceptions in this case, and 'custom' exceptions (those defined as FaultContacts by the service developer and present in the service contract reference).

    In the first case your concerns, I would suppose, are CommunicationException and TimeoutException; these are documented possible exceptions for ICommunicationObject.BeginOpen and other 'opening' methods of ICommunicationObject (the base of the model). CommunicationObjectFaultedException is documented for 'closing' methods. There is also QuotaExceededException for methods that send messages, such as IRequestChannel.Request. Among the many more that might be, these should be discoverable.

    Worth noting, from an MSDN article linked above, is this:

    All exceptions thrown by channels must be either a System.TimeoutException, System.ServiceModel.CommunicationException, or a type derived from CommunicationException. (Exceptions such as ObjectDisposedException may also be thrown, but only to indicate that the calling code has misused the channel. If a channel is used correctly, it must only throw the given exceptions.)

    Then there are 'Faults', which are exceptions raised on the service-side and (potentially, if enabled) are detailed to the caller, the caller can then handle that or throw the proper client-side exception:

    When generating a fault, the custom channel should not send the fault directly, rather, it should throw an exception and let the layer above decide whether to convert that exception to a fault and how to send it.

    The channel State offers an event of Faulted to which you can subscribe to to be informed when such a state it reached, and perhaps act. By default (without configuring supression (?)) the faults will be raised as managed exceptions; again, to reiterate:

    In WCF clients, SOAP faults that occur during communication that are of interest to client applications are raised as managed exceptions. While there are many exceptions that can occur during the execution of any program, applications using the WCF client programming model can expect to handle exceptions of the [...] two types as a result of communication.

    And this refers again to the CommunicationException and TimeoutException mentioned above.

    Lastly, for now at least, is the unexpected:

    FaultException exceptions are thrown when a listener receives a fault that is not expected or specified in the operation contract; usually this occurs when the application is being debugged and the service has the System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults property set to true.

    0 讨论(0)
提交回复
热议问题