using System.Collections.Generic;
using System.IO;
using System.Net;
+using System.Net.Sockets;
using System.Net.Security;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Security;
using System.Threading;
+using System.Xml;
namespace System.ServiceModel.Channels
{
}
try {
return TryReceiveRequest (tout, out ctx);
+ } catch (XmlException ex) {
+ Console.WriteLine ("Xml Exception (Dropped Connection?):" + ex.Message);
+ //on dropped connection,
+ //whatever you do don't crash
+ //the whole app. Ignore for now
+ } catch (SocketException ex) {
+ Console.WriteLine ("Socket Exception (Dropped Connection?):" + ex.Message);
+ //on dropped connection,
+ //whatever you do don't crash
+ //the whole app. Ignore for now
+ } catch (IOException ex) {
+ Console.WriteLine ("I/O Exception (Dropped Connection?):" + ex.Message);
+ //on dropped connection,
+ //whatever you do don't crash
+ //the whole app. Ignore for now
} finally {
lock (async_result_lock) {
CurrentAsyncResult = null;
CurrentAsyncThread = null;
}
}
+ ctx = null;
+ return false;
});
RequestContext dummy;
IAsyncResult result;
using System.ServiceModel.Security;
using System.ServiceModel.Security.Tokens;
using System.Text;
+using System.IO;
+using System.Xml;
+using System.Net.Sockets;
namespace System.ServiceModel.Dispatcher
{
using (new OperationContextScope (mrc.OperationContext)) {
try {
process_handlers_chain.ProcessRequestChain (mrc);
- }
- catch (Exception e) {
+ } catch (IOException e) {
+ // FIXME?: On dropped connection do not
+ // dump a stacktrace, but should be safe
+ // to dump a console message as in
+ // default exception handler and
+ // call error_handlers_chain
+ Console.WriteLine ("I/O Error (Dropped Connection?): " + e.Message);
+ mrc.ProcessingException = e;
+ error_handlers_chain.ProcessRequestChain (mrc);
+ } catch (SocketException e) {
+ // FIXME?: On dropped connection do not
+ // dump a stacktrace, but should be safe
+ // to dump a console message as in
+ // default exception handler and
+ // call error_handlers_chain
+ Console.WriteLine ("SocketExcpetion (Dropped Connection?): " + e.Message);
+ mrc.ProcessingException = e;
+ error_handlers_chain.ProcessRequestChain (mrc);
+ } catch (XmlException e) {
+ // FIXME?: On dropped connection do not
+ // dump a stacktrace, but should be safe
+ // to dump a console message as in
+ // default exception handler and
+ // call error_handlers_chain
+ Console.WriteLine ("XmlException (Dropped Connection?): " + e.Message);
+ mrc.ProcessingException = e;
+ error_handlers_chain.ProcessRequestChain (mrc);
+ } catch (Exception e) {
// FIXME: this is not really expected use of ChannelDispatcher.ErrorHandlers.
// They are now correctly used in process_handler_chain (namely OperationInvokerHandler).
// For this kind of "outsider" exceptions are actually left thrown
using System.Transactions;
using System.ServiceModel;
using System.ServiceModel.Description;
+using System.Net.Sockets;
+using System.Xml;
+using System.IO;
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 {