New tests.
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Dispatcher / ErrorProcessingHandler.cs
index 18439d545a287a98e76a2cef6f2bc6a230cfb62c..baa0f4ee0fb4cc1782e4fe05452a2709c185c26f 100644 (file)
@@ -1,41 +1,44 @@
-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;
+               }               
+       }
+}