рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрд╛рд╣рд░, рдореБрдЭреЗ рдореЛрдиреЛ 2.6.7 рдХреЗ рддрд╣рдд WCF рд╕реЗрд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдерд╛ред
рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ .NET рдФрд░ рдореЛрдиреЛ рдХреЗ рддрд╣рдд рджреЛрдиреЛрдВ рдХрд╛рдо рдХрд┐рдпрд╛ - рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ WCFI рддрд░реАрдХреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛рдПрдВ рддрдм рд╢реБрд░реВ рд╣реБрдИрдВ рдЬрдм рдореБрдЭреЗ рдЕрдкрдиреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА, рдЬрд┐рд╕рдореЗрдВ рди рдХреЗрд╡рд▓ рдЕрдкрд╡рд╛рдж рд╕рдВрджреЗрд╢ рдерд╛, рдмрд▓реНрдХрд┐ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рднреА рдереАред
рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рд╕рдореНрдорд╛рдирдЬрдирдХ рд░реЛрдорди
рд░реЛрдордирдХрд┐рдЯрд┐рди рдХреЗ рд▓реЗрдЦ "рдЕрдкрд╡рд╛рдж" WCF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрд╡рд╛рдж "(http://habrahabr.ru/blogs/net/41638/) рдХреЛ
рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реВрдВрдЧрд╛ ред
.NET рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореЛрдиреЛ рдХреЗ рддрд╣рдд рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реБрдИ:
рдбрдмреНрд▓реНрдпреВрд╕реАрдПрдл рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓реЗрдЦ, рдкреНрд░реЗрд╖рд┐рдд рдПрд╕рдУрдПрдкреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдирд┐рджрд╛рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдореЛрдиреЛ рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬреЛ рдХрд┐ рдлрд╛рд▓реНрдЯрдореИрд╕реЗрдЬ рд╣реИред
рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ "рдЧрд▓рддреА" рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдФрд░ рднрдЯрдХрд╛рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдорд╛рдзрд╛рди рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
WCF рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
WCF рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ IErrorHandler рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ FaultErrorHandler рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред
/// <summary>
/// WCF-
/// </summary>
public class FaultErrorHandler : IErrorHandler
{
WCFExceptionSerializer serializer = new WCFExceptionSerializer();
/// <summary>
/// , , , , .
/// </summary>
/// <param name="error">, - WCF-</param>
/// <returns>/</returns>
public bool HandleError(Exception error)
{
return true ;
}
/// <summary>
///
/// </summary>
/// <param name="error">, - WCF-</param>
/// <param name="version"> SOAP-</param>
/// <param name="fault">, </param>
public void ProvideFault(Exception error, System.ServiceModel.Channels.MessageVersion version, ref System.ServiceModel.Channels.Message fault)
{
fault = Message.CreateMessage(version, String .Empty, error, serializer);
fault.Headers.Add(MessageHeader.CreateHeader( "error" , String .Empty, null ));
}
}
* This source code was highlighted with Source Code Highlighter .
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рдХреНрд░рдорд╛рдВрдХрди WmlFbceptionSerializer рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЗ рд╡рдВрд╢рдЬ WCFExceptionSerializer рд╡рд░реНрдЧ рдХреЗ serializer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ FaultMessage рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдВрджреЗрд╢ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрджреЗрд╢ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдВрджреЗрд╢ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, "рддреНрд░реБрдЯрд┐" рддрддреНрд╡ рдХреЛ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
/// <summary>
/// -
/// </summary>
public class WCFExceptionSerializer : XmlObjectSerializer
{
public override bool IsStartObject(System.Xml.XmlDictionaryReader reader)
{
return false ;
}
public override object ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName)
{
return null ;
}
public override void WriteEndObject(System.Xml.XmlDictionaryWriter writer)
{
}
public override void WriteStartObject(System.Xml.XmlDictionaryWriter writer, object graph)
{
}
/// <summary>
///
/// </summary>
/// <param name="writer"> -</param>
/// <param name="graph"> </param>
public override void WriteObjectContent(System.Xml.XmlDictionaryWriter writer, object graph)
{
Exception e = graph as Exception;
writer.WriteStartElement(e.GetType().Name);
writer.WriteElementString( "Message" , e.Message);
if (e is SomeCustomException) writer.WriteElementString( "AddData" , (e as SomeCustomException).AdditionalData.ToString());
writer.WriteEndElement();
}
}
* This source code was highlighted with Source Code Highlighter .
WCFExceptionSerializer рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдкрд╡рд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдкрд╡рд╛рдж рд╕рдВрджреЗрд╢ рдФрд░ рдЙрд╕рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЛ рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдЗрд╕ рд╕рдВрджреЗрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреИрд╕реЗ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕, рд╕реЛрд░реНрд╕ рдЖрджрд┐ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдВрджреЗрд╢ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
< s:Envelope xmlns:s ="http://schemas.xmlsoap.org/soap/envelope/" >
< s:Header >
< error i:nil ="true" xmlns:i ="http://www.w3.org/2001/XMLSchema-instance" xmlns ="" ></ error >
</ s:Header >
< s:Body >
< DivideByZeroException xmlns ="" >
< Message > . </ Message >
</ DivideByZeroException >
</ s:Body >
</ s:Envelope >
* This source code was highlighted with Source Code Highlighter .
рд╣рдо ErrorHandlingBehavior рд╕реЗрд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред
/// <summary>
/// ,
/// </summary>
public class ErrorHandlingBehavior : Attribute , IContractBehavior
{
//
private void ApplyDispatchBehavior(ChannelDispatcher dispatcher)
{
foreach (IErrorHandler errorHandler in dispatcher.ErrorHandlers)
{
if (errorHandler is FaultErrorHandler)
{
return ;
}
}
dispatcher.ErrorHandlers.Add( new FaultErrorHandler());
}
//
// ContractBehavior
//
void IContractBehavior.AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
void IContractBehavior.ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add( new ErrorInspector());
}
void IContractBehavior.ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
this .ApplyDispatchBehavior(dispatchRuntime.ChannelDispatcher);
}
void IContractBehavior.Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
{
return ;
}
}
* This source code was highlighted with Source Code Highlighter .
рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП ErrorHandlingBehavior рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
[ServiceContract, ErrorHandlingBehavior]
public interface IMyService
{
[OperationContract]
void MethodWithException();
}
public class MyService : IMyService
{
public void MethodWithException()
{
Random r = new Random ( DateTime .Now.Millisecond);
r.Next(100);
int a = 30 / (r.Next(100) % 2);
throw new SomeCustomException( " " , 12.987);
}
}
* This source code was highlighted with Source Code Highlighter .
рдХреЗрд╡рд▓ MyService рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐ рдпрд╛ рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд DivideByZeroException, рдпрд╛ рдПрдХ SomeCustomException рдЬреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ (рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛) рдлреЗрдВрдХрддрд╛ рд╣реИ рдлреЗрдВрдХрддрд╛ рд╣реИред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрджреЗрд╢ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
< s:Envelope xmlns:s ="http://schemas.xmlsoap.org/soap/envelope/" >
< s:Header >
< error i:nil ="true" xmlns:i ="http://www.w3.org/2001/XMLSchema-instance" xmlns ="" ></ error >
</ s:Header >
< s:Body >
< SomeCustomException xmlns ="" >
< Message > </ Message >
< AddData > 12,987 </ AddData >
</ SomeCustomException >
</ s:Body >
</ s:Envelope >
* This source code was highlighted with Source Code Highlighter .
рдЕрдм рд╕реЗрд╡рд╛ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдЪрд▓реЛ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВред
рд╕рдВрджреЗрд╢ рдирд┐рд░реАрдХреНрд╖рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП ErrorInspector рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬреЛ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╕рдВрджреЗрд╢ рд╢реАрд░реНрд╖рдХ рдореЗрдВ "рддреНрд░реБрдЯрд┐" рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИред
/// <summary>
///
/// </summary>
public class ErrorInspector : IClientMessageInspector
{
/// <summary>
/// -
/// ( Fault-)
///
/// </summary>
/// <param name="reply"></param>
/// <param name="correlationState">,
/// BeforeSendRequest ( )</param>
public void AfterReceiveReply( ref Message reply, object correlationState)
{
int errorHeaderIndex = reply.Headers.FindHeader( "error" , String .Empty);
if (errorHeaderIndex > -1)
{
throw ExtractException(reply.GetReaderAtBodyContents());
}
}
/// <summary>
/// -
///
///
/// </summary>
public object BeforeSendRequest( ref Message request, System.ServiceModel.IClientChannel channel)
{
return null ;
}
/// <summary>
///
///
/// WCFException.
///
/// Data WCFException.
/// - .
/// </summary>
/// <param name="xdr"> </param>
/// <returns> WCFException ( WCF-)</returns>
private WCFException ExtractException(XmlDictionaryReader xdr)
{
WCFException wcfError = new WCFException();
wcfError.ExceptonType = xdr.Name;
xdr.ReadToFollowing( "Message" );
xdr.Read();
wcfError.Message = xdr.Value;
if (wcfError.ExceptonType == WCFException.SomeCustomException)
{
xdr.ReadToFollowing( "AddData" );
xdr.Read();
wcfError.Data[ "AddData" ] = xdr.Value;
}
return wcfError;
}
}
* This source code was highlighted with Source Code Highlighter .
рд╣рдорд╛рд░реЗ рд╕рдВрджреЗрд╢ рдирд┐рд░реАрдХреНрд╖рдХ рдХреЛ ErrorHandlingBehavior рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ ApplyClientBehavior рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
void IContractBehavior.ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add( new ErrorInspector());
}
* This source code was highlighted with Source Code Highlighter .
"рдЧрд▓рддреА" рд╕рдВрджреЗрд╢ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрдХреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдЕрдкрд╡рд╛рдж рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рд╢рд░реАрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реАрдб рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, WCFException (рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА) рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВред
/// <summary>
/// WCF-
/// </summary>
public class WCFException : Exception
{
//
// Data
//
public static readonly string SomeCustomException = "SomeCustomException" ;
/// <summary>
///
/// </summary>
public WCFException()
: base ()
{
}
/// <summary>
///
/// </summary>
public string ExceptonType
{
get ;
set ;
}
/// <summary>
///
/// </summary>
public new string Message
{
get ;
set ;
}
}
* This source code was highlighted with Source Code Highlighter .
рдЕрдм рдпрд╣ WCF рд╕реЗрд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рд╣реИрдВрдбрд▓рд┐рдВрдЧрд╣реИрд╡рд┐рдпрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
MyServiceClient client = new MyServiceClient();
client.Endpoint.Contract.Behaviors.Add( new ErrorHandlingBehavior());
Console .WriteLine( " Enter, " );
Console .ReadKey();
try
{
client.MethodWithException();
}
catch (WCFException wcfEx)
{
Console .WriteLine( ":" );
Console .WriteLine( ": " + wcfEx.Message);
if (wcfEx.ExceptonType == WCFException.SomeCustomException)
Console .WriteLine( " : " + wcfEx.Data[ "AddData" ].ToString());
}
catch (Exception e)
{
Console .WriteLine(e.Message);
}
Console .ReadKey();
* This source code was highlighted with Source Code Highlighter .
WCFException рдЕрдкрд╡рд╛рдж рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдирдП ErrorHandlingBehavior рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕реЗрд╡рд╛ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ред
рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ DivideByZeroException:
рдФрд░ рдирдИ SomeCustomException:
рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдордирдорд╛рдиреЗ рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╡рд┐рд╡рд░рдг рдХрдХреНрд╖рд╛рдПрдВ (рдЬрд┐рдиреНрд╣реЗрдВ рдлрд╝реЙрд▓реНрдЯрдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рдВрджреЗрд╢ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ; рд╣рдо рдХреЗрд╡рд▓ рд╡рд╣реА рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддрд╛ рд╣реИ
рдХрдорд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ, рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЗрд╕рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдХрд╕реНрдЯрдо рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ WCFExceptionSerializer рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ ErrorInspector рдореЗрдВ deserialized рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рде рд╣реА, рдЗрд╕ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджреЗрд╢ рдХрд╛ рдирд╛рдо WCFException рд╡рд░реНрдЧ рдХреЗ рдПрдХ рд╕реНрдерд┐рд░, рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╢рд╛рдпрдж рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐)рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐)