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);
        }
Example #2
0
        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");
        }
Example #3
0
        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);
            }
        }
Example #5
0
 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;
         }
     }
 }
Example #6
0
 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);
                }
            }
        }
Example #8
0
        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);
        }