Hello, [ I am CCing Atsushi so he can eyeball the patch ] Thanks for the background research and for pointing me to that long-standing bug.
It seems like a pull request was created, but that the author closed the pull request. I have updated the patch, can you try this and report back? https://gist.github.com/migueldeicaza/01aaf064b1bf626f8cc0 Atsushi, does the above look correct? And is Console.WriteLine the right thing to do there, or should we use some other mechanism? Miguel On Sat, Feb 14, 2015 at 6:24 PM, Horst Müller <alexhg...@gmail.com> wrote: > Greetings! > > I've stumbled upon what I believe to be a rather serious problem in mono's > WCF implementation. > > When a client disconnects during a transmission from a WebServiceHost, an > exception is thrown: > > Exception Write failure at System.Net.Sockets.NetworkStream.Write > (System.Byte[] buffer, Int32 offset, Int32 size) [0x0008e] in > /build/mono/src/mono-3.12.0/mcs/class/System/System.Net.Sockets/NetworkStream.cs:418 > > at System.Net.ResponseStream.InternalWrite (System.Byte[] buffer, Int32 > offset, Int32 count) [0x00029] in > /build/mono/src/mono-3.12.0/mcs/class/System/System.Net/ResponseStream.cs:132 > > at System.Net.ResponseStream.Write (System.Byte[] buffer, Int32 offset, > Int32 count) [0x000dd] in > /build/mono/src/mono-3.12.0/mcs/class/System/System.Net/ResponseStream.cs:165 > > at System.ServiceModel.Channels.Http.HttpRequestContext.InternalReply > (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00157] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpRequestContext.cs:160 > > at System.ServiceModel.Channels.Http.HttpRequestContext.Reply > (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00000] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpRequestContext.cs:101 > > at System.ServiceModel.Dispatcher.MessageProcessingContext.Reply > (Boolean useTimeout) [0x00026] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/MessageProcessingContext.cs:96 > > at System.ServiceModel.Dispatcher.OperationInvokerHandler.Reply > (System.ServiceModel.Dispatcher.MessageProcessingContext mrc, Boolean > useTimeout) [0x0001d] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/OperationInvokerHandler.cs:69 > > at System.ServiceModel.Dispatcher.OperationInvokerHandler.ProcessRequest > (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00044] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/OperationInvokerHandler.cs:29 > > at > System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain > (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00000] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseRequestProcessorHandler.cs:15 > > at > System.ServiceModel.Dispatcher.BaseRequestProcessorHandler.ProcessRequestChain > (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00017] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseRequestProcessorHandler.cs:16 > > at System.ServiceModel.Dispatcher.HandlersChain.ProcessRequestChain > (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x0000b] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseRequestProcessor.cs:72 > > at System.ServiceModel.Dispatcher.BaseRequestProcessor.ProcessRequest > (System.ServiceModel.Dispatcher.MessageProcessingContext mrc) [0x00018] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseRequestProcessor.cs:26 > > > This exception gets caught and rethrown until it ends up at > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs:596, > where ProcessErrorWithHandlers returns false and we reply to the > RequestContext with an error message. This then generates a second > exception that is not caught, crashing the whole program: > > Unhandled Exception: > System.InvalidOperationException: Cannot be changed after headers are sent. > at System.Net.HttpListenerResponse.set_ContentType (System.String value) > [0x00027] in > /build/mono/src/mono-3.12.0/mcs/class/System/System.Net/HttpListenerResponse.cs:110 > > at > System.ServiceModel.Channels.Http.HttpStandaloneResponseInfo.set_ContentType > (System.String value) [0x00000] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpContextInfo.cs:274 > > at System.ServiceModel.Channels.Http.HttpRequestContext.InternalReply > (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00046] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpRequestContext.cs:140 > > at System.ServiceModel.Channels.Http.HttpRequestContext.Reply > (System.ServiceModel.Channels.Message msg, TimeSpan timeout) [0x00000] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpRequestContext.cs:101 > > at System.ServiceModel.Channels.Http.HttpRequestContext.Reply > (System.ServiceModel.Channels.Message msg) [0x00000] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpRequestContext.cs:96 > > at System.ServiceModel.Dispatcher.ListenerLoopManager.ProcessRequest > (IReplyChannel reply, System.ServiceModel.Channels.RequestContext rc) > [0x0003b] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs:601 > > at > System.ServiceModel.Dispatcher.ListenerLoopManager.TryReceiveRequestDone > (IAsyncResult result) [0x0001a] in > /build/mono/src/mono-3.12.0/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs:575 > > > I've attached an example that will trigger the problem if used to serve a > large file over a network. As soon as the client cancels the transfer, the > application will crash. In Microsoft .NET, no crash is observed. > > I would be very grateful if someone could comment on this issue. > Apparently the problem has been reported before, but it seems no fix was > implemented: > https://bugzilla.xamarin.com/show_bug.cgi?id=5926 > > Is my example doing something that you're not supposed to do? It seems to > me that the WebServiceHost functionality is completely unusable with this > bug. > > Thanks and best regards, > Alex > > > > _______________________________________________ > Mono-devel-list mailing list > Mono-devel-list@lists.ximian.com > http://lists.ximian.com/mailman/listinfo/mono-devel-list > >
_______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list