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; } } 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); }
public void TryCreateExceptionDefault() { Message msg; Assert.IsFalse(s12.TryCreateFaultMessage(new Exception("error happened"), out msg), "#1-1"); Assert.IsFalse(s12.TryCreateFaultMessage(new FaultException("fault happened", FaultCode.CreateSenderFaultCode(new FaultCode("IAmBroken"))), out msg), "#1-2"); Assert.IsFalse(s12.TryCreateFaultMessage(new FaultException <string> ("fault happened."), out msg), "#1-3"); Assert.IsFalse(s11.TryCreateFaultMessage(new Exception("error happened"), out msg), "#2-1"); Assert.IsFalse(s11.TryCreateFaultMessage(new FaultException("fault happened", FaultCode.CreateSenderFaultCode(new FaultCode("IAmBroken"))), out msg), "#2-2"); Assert.IsFalse(s11.TryCreateFaultMessage(new FaultException <string> ("fault happened."), out msg), "#2-3"); }
public void TryCreateFaultMessageDefault() { Message msg; Assert.IsFalse(s12.TryCreateFaultMessage(new Exception("error happened"), out msg), "#1-1"); Assert.IsFalse(s12.TryCreateFaultMessage(new FaultException("fault happened", FaultCode.CreateSenderFaultCode(new FaultCode("IAmBroken"))), out msg), "#1-2"); Assert.IsFalse(s12.TryCreateFaultMessage(new FaultException <string> ("fault happened."), out msg), "#1-3"); Assert.IsTrue(s12.TryCreateFaultMessage(new ActionNotSupportedException(), out msg), "#1-4"); Assert.IsTrue(msg.IsFault, "#1-5"); Assert.AreEqual("http://www.w3.org/2005/08/addressing/fault", msg.Headers.Action, "#1-6"); var f = MessageFault.CreateFault(msg, 1000); Assert.AreEqual("Sender", f.Code.Name, "#1-7"); Assert.AreEqual("http://www.w3.org/2003/05/soap-envelope", f.Code.Namespace, "#1-8"); Assert.AreEqual("ActionNotSupported", f.Code.SubCode.Name, "#1-9"); Assert.AreEqual("http://www.w3.org/2005/08/addressing", f.Code.SubCode.Namespace, "#1-10"); Assert.IsFalse(s11.TryCreateFaultMessage(new Exception("error happened"), out msg), "#2-1"); Assert.IsFalse(s11.TryCreateFaultMessage(new FaultException("fault happened", FaultCode.CreateSenderFaultCode(new FaultCode("IAmBroken"))), out msg), "#2-2"); Assert.IsFalse(s11.TryCreateFaultMessage(new FaultException <string> ("fault happened."), out msg), "#2-3"); Assert.IsTrue(s11.TryCreateFaultMessage(new ActionNotSupportedException(), out msg), "#2-4"); Assert.IsTrue(msg.IsFault, "#2-5"); Assert.AreEqual("http://www.w3.org/2005/08/addressing/fault", msg.Headers.Action, "#2-6"); f = MessageFault.CreateFault(msg, 1000); Assert.AreEqual("ActionNotSupported", f.Code.Name, "#2-7"); Assert.AreEqual("http://www.w3.org/2005/08/addressing", f.Code.Namespace, "#2-8"); Assert.IsFalse(none.TryCreateFaultMessage(new Exception("error happened"), out msg), "#3-1"); Assert.IsFalse(none.TryCreateFaultMessage(new FaultException("fault happened", FaultCode.CreateSenderFaultCode(new FaultCode("IAmBroken"))), out msg), "#3-2"); Assert.IsFalse(none.TryCreateFaultMessage(new FaultException <string> ("fault happened."), out msg), "#3-3"); Assert.IsFalse(none.TryCreateFaultMessage(new ActionNotSupportedException(), out msg), "#3-4"); Assert.IsFalse(none.TryCreateFaultMessage(new EndpointNotFoundException(), out msg), "#3-5"); }
protected override bool OnTryCreateFaultMessage(Exception exception, out Message message) { if (_innerChannel == null) { message = null; return(false); } FaultConverter inner = _innerChannel.GetProperty <FaultConverter>(); if (inner != null) { return(inner.TryCreateFaultMessage(exception, out message)); } else { message = null; return(false); } }
public override void Reply(Message message, TimeSpan timeout) { try { if (!message.IsFault && message.Headers.Action != Constants.WstIssueReplyAction) { message = SecureMessage(message); } source.Reply(message, timeout); } catch (Exception ex) { FaultConverter fc = FaultConverter.GetDefaultFaultConverter(msg.Version); Message fault; if (fc.TryCreateFaultMessage(ex, out fault)) { source.Reply(fault, timeout); } else { throw; } } }
private void ProvideWellKnownFault(Exception e, FaultConverter faultConverter, ref ErrorHandlerFaultInfo faultInfo) { if (faultConverter != null && faultConverter.TryCreateFaultMessage(e, out Message faultMessage)) { faultInfo.Fault = faultMessage; return; } else if (e is NetDispatcherFaultException) { NetDispatcherFaultException ndfe = e as NetDispatcherFaultException; if (_debug) { ExceptionDetail detail = new ExceptionDetail(ndfe); faultInfo.Fault = Message.CreateMessage(_messageVersion, MessageFault.CreateFault(ndfe.Code, ndfe.Reason, detail), ndfe.Action); } else { faultInfo.Fault = Message.CreateMessage(_messageVersion, ndfe.CreateMessageFault(), ndfe.Action); } } }
private void ProvideWellKnownFault(Exception e, FaultConverter faultConverter, ref ErrorHandlerFaultInfo faultInfo) { Message message; if ((faultConverter != null) && faultConverter.TryCreateFaultMessage(e, out message)) { faultInfo.Fault = message; } else if (e is NetDispatcherFaultException) { NetDispatcherFaultException exception = e as NetDispatcherFaultException; if (this.debug) { ExceptionDetail detail = new ExceptionDetail(exception); faultInfo.Fault = Message.CreateMessage(this.messageVersion, MessageFault.CreateFault(exception.Code, exception.Reason, detail), exception.Action); } else { faultInfo.Fault = Message.CreateMessage(this.messageVersion, exception.CreateMessageFault(), exception.Action); } } }
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); }