X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.ServiceModel%2FSystem.ServiceModel.Dispatcher%2FChannelDispatcher.cs;h=65b5c8cf38ae6913b2482b54609ecc8ee45064e4;hb=28f473c41df72b278eaf9784c29c2b8fa2cbe06a;hp=10834fc0ae81deafcb1f22b0a54bd2ab3f12b939;hpb=5b6c684d26995e720a05ff5d1cd2210e31d041ad;p=mono.git diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs index 10834fc0ae8..65b5c8cf38a 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs +++ b/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs @@ -35,6 +35,9 @@ using System.Threading; using System.Transactions; using System.ServiceModel; using System.ServiceModel.Description; +using System.Net.Sockets; +using System.Xml; +using System.IO; namespace System.ServiceModel.Dispatcher { @@ -584,10 +587,14 @@ namespace System.ServiceModel.Dispatcher { Message msg; var input = (IInputChannel) result.AsyncState; - if (input.EndTryReceive (result, out msg)) - ProcessInput (input, msg); - else + try { + if (input.EndTryReceive (result, out msg)) + ProcessInput (input, msg); + else + input.Close (); + } catch (ObjectDisposedException) { input.Close (); + } } void ProcessRequest (IReplyChannel reply, RequestContext rc) @@ -601,7 +608,10 @@ namespace System.ServiceModel.Dispatcher if (ProcessErrorWithHandlers (reply, ex, out res)) return; - rc.Reply (res); + if ((!(ex is SocketException)) && + (!(ex is XmlException)) && + (!(ex is IOException))) + rc.Reply (res); reply.Close (owner.DefaultCloseTimeout); // close the channel } finally {