-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.ServiceModel.Channels;\r
-using System.ServiceModel;\r
-\r
-namespace System.ServiceModel.Dispatcher\r
-{\r
- internal class ErrorProcessingHandler : BaseRequestProcessorHandler\r
- {\r
- public ErrorProcessingHandler (IChannel channel)\r
- {\r
- duplex = channel as IDuplexChannel;\r
- }\r
-\r
- IDuplexChannel duplex;\r
-\r
- protected override bool ProcessRequest (MessageProcessingContext mrc)\r
- {\r
- Exception ex = mrc.ProcessingException;\r
- DispatchRuntime dispatchRuntime = mrc.OperationContext.EndpointDispatcher.DispatchRuntime;\r
- \r
- //invoke all user handlers\r
- ChannelDispatcher channelDispatcher = dispatchRuntime.ChannelDispatcher;\r
- foreach (IErrorHandler handler in channelDispatcher.ErrorHandlers)\r
- if (handler.HandleError (ex))\r
- break;\r
-\r
- FaultConverter fc = FaultConverter.GetDefaultFaultConverter (dispatchRuntime.ChannelDispatcher.MessageVersion);\r
- Message res = null; \r
- if (!fc.TryCreateFaultMessage (ex, out res))\r
- throw ex;\r
- mrc.ReplyMessage = res;\r
- if (duplex != null)\r
- mrc.Reply (duplex, true);\r
- else\r
- mrc.Reply (true);\r
- return false;\r
- } \r
- }\r
-}\r
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ServiceModel.Channels;
+using System.ServiceModel;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class ErrorProcessingHandler : BaseRequestProcessorHandler
+ {
+ public ErrorProcessingHandler (IChannel channel)
+ {
+ duplex = channel as IDuplexChannel;
+ }
+
+ IDuplexChannel duplex;
+
+ protected override bool ProcessRequest (MessageProcessingContext mrc)
+ {
+ Exception ex = mrc.ProcessingException;
+ DispatchRuntime dispatchRuntime = mrc.OperationContext.EndpointDispatcher.DispatchRuntime;
+
+ //invoke all user handlers
+ ChannelDispatcher channelDispatcher = dispatchRuntime.ChannelDispatcher;
+ foreach (IErrorHandler handler in channelDispatcher.ErrorHandlers)
+ if (handler.HandleError (ex))
+ break;
+
+ // FIXME: remove them. FaultConverter also covers errors like EndpointNotFoundException, which this handler never covers. And checking converter twice is extraneous, so this part is just extraneous.
+ // FIXME: actually everything is done in OperationInvokerHandler now...
+ FaultConverter fc = FaultConverter.GetDefaultFaultConverter (dispatchRuntime.ChannelDispatcher.MessageVersion);
+ Message res = null;
+ if (!fc.TryCreateFaultMessage (ex, out res))
+ throw ex;
+ mrc.ReplyMessage = res;
+
+ if (duplex != null)
+ mrc.Reply (duplex, true);
+ else
+ mrc.Reply (true);
+ return false;
+ }
+ }
+}