void HandleFault( Exception error, ref Message fault, Guid handlingInstanceId, FaultContractWrapperException faultContractWrapper = null) { if (fault == null) { throw new ArgumentNullException(nameof(fault)); } if (_wcfContext.HasWebOperationContext) { BuildHttpResponseMessage( $"An error has occurred while consuming this service. Please contact your administrator for more information. Error ID: {GetHandlingInstanceId(error, handlingInstanceId)}", fault.Headers.Action, HttpStatusCode.InternalServerError, ref fault); } else { fault = Message.CreateMessage( fault.Version, new FaultException( new FaultReason( new FaultReasonText($"An error has occurred while consuming this service. Please contact your administrator for more information. Error ID: {GetHandlingInstanceId(error, handlingInstanceId)}")), FaultCode.CreateReceiverFaultCode( SoapException.ServerFaultCode.Name, SoapException.ServerFaultCode.Namespace)) .CreateMessageFault(), _wcfContext.GetFaultedAction(faultContractWrapper?.FaultContract?.GetType()) ?? fault.Headers.Action); } }
public void ShouldGetReplacedExceptionMessage() { FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), "NewValue", null); Exception exception = new Exception("MyException"); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, Guid.NewGuid()); Assert.AreEqual("NewValue", result.Message); }
public void CanCreateInstanceWithFaultContract() { MockFaultContract faultContract = new MockFaultContract(); FaultContractWrapperException instance = new FaultContractWrapperException(faultContract); Assert.IsNotNull(instance); Assert.AreEqual(faultContract, instance.FaultContract); }
public void CanCreateInstanceWithFaultContractAndGuid() { MockFaultContract faultContract = new MockFaultContract(); Guid guid = Guid.NewGuid(); FaultContractWrapperException instance = new FaultContractWrapperException(faultContract, guid); Assert.AreEqual(faultContract, instance.FaultContract); Assert.IsTrue(instance.Message.Contains(guid.ToString())); }
public void ShouldGetReplacedExceptionMessageWithGuid() { FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), "NewValue: {handlingInstanceID}", null); Exception exception = new Exception("MyException"); Guid guid = Guid.NewGuid(); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, guid); Assert.IsTrue(result.Message.Contains(guid.ToString())); }
public void CannotInjectInvalidPropertyNameIntoFaultContract() { NameValueCollection attributes = new NameValueCollection(); attributes.Add("Message", "{Invalid}"); FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), attributes); Exception exception = new Exception("MyException"); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, Guid.NewGuid()); Assert.IsTrue(string.IsNullOrEmpty(((MockFaultContract)result.FaultContract).Message)); }
public void CanInjectGuidAttributesIntoFaultContract() { NameValueCollection attributes = new NameValueCollection(); attributes.Add("Id", "{Guid}"); FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), attributes); Guid id = Guid.NewGuid(); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(new Exception(), id); Assert.AreEqual(id, ((MockFaultContract)result.FaultContract).Id); }
public void CanInjectInvalidPropertyValueIntoFaultContract() { NameValueCollection attributes = new NameValueCollection(); attributes.Add("Invalid", "{Message}"); FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), attributes); Exception exception = new Exception("MyException"); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, Guid.NewGuid()); Assert.AreEqual(exception.Message, ((MockFaultContract)result.FaultContract).Message); }
public void CanCreateInstanceWithFaultContractAndGuidAndNullMessage() { MockFaultContract faultContract = new MockFaultContract(); Guid guid = Guid.NewGuid(); Exception innerException = new Exception(); FaultContractWrapperException instance = new FaultContractWrapperException(faultContract, guid, null); Assert.AreEqual(faultContract, instance.FaultContract); Assert.IsFalse(string.IsNullOrEmpty(instance.Message)); Assert.IsTrue(instance.Message.Contains(guid.ToString())); }
public void CanAssignFaultContractMessage() { MockFaultContract mock = new MockFaultContract("message"); FaultContractWrapperException instance = new FaultContractWrapperException(mock); Assert.AreSame(mock, instance.FaultContract); MockFaultContract newMock = new MockFaultContract(); instance.FaultContract = newMock; Assert.AreSame(newMock, instance.FaultContract); }
public void CanInjectInvalidPropertyValueIntoCustomPropertyFaultContract() { NameValueCollection attributes = new NameValueCollection(); attributes.Add("Invalid", "{OffendingNumber}"); FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), attributes); NotFiniteNumberException exception = new NotFiniteNumberException("MyException", 1231254); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, Guid.NewGuid()); Assert.AreEqual((double)0, ((MockFaultContract)result.FaultContract).SomeNumber); }
public void CanPreventFieldMapping() { NameValueCollection attributes = new NameValueCollection(); attributes.Add("Message", ""); FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), attributes); Exception exception = new Exception("Should not copy this message"); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, Guid.NewGuid()); Assert.IsNull(((MockFaultContract)result.FaultContract).Message); }
void HandleFaultWrapper( FaultContractWrapperException faultContractWrapper, ref Message fault) { if (faultContractWrapper == null) { throw new ArgumentNullException(nameof(faultContractWrapper)); } if (fault == null) { throw new ArgumentNullException(nameof(fault)); } try { var action = _wcfContext.GetFaultedAction(faultContractWrapper.FaultContract.GetType()) ?? fault.Headers.Action; if (!_wcfContext.HasWebOperationContext) { // in a SOAP only context, just build a new fault message out of the wrapped fault data and return fault = Message.CreateMessage( fault.Version, ((FaultException)Activator.CreateInstance( typeof(FaultException <>) .MakeGenericType(faultContractWrapper.FaultContract.GetType()), faultContractWrapper.FaultContract, faultContractWrapper.Message)) .CreateMessageFault(), action); } else { var faultDetails = faultContractWrapper.FaultContract as Fault; // we need to build a JSON or XML message out of the wrapped fault and put it in the web response: BuildHttpResponseMessage( faultDetails, action, faultDetails?.HttpStatusCode ?? HttpStatusCode.InternalServerError, ref fault); } } catch (Exception unhandledException) { // There was an error during MessageFault build process, so treat it as an Unhandled Exception // log the exception and send an unhandled server exception var handlingInstanceId = LogServerException(unhandledException); HandleFault(unhandledException, ref fault, handlingInstanceId, null); } }
public void CanInjectAttributesIntoFaultContract() { NameValueCollection attributes = new NameValueCollection(); attributes.Add("Message", "{Message}"); attributes.Add("Data", "{Data}"); attributes.Add("SomeNumber", "{OffendingNumber}"); FaultContractExceptionHandler instance = new FaultContractExceptionHandler(typeof(MockFaultContract), attributes); NotFiniteNumberException exception = new NotFiniteNumberException("MyException", 12341234123412); exception.Data.Add("someKey", "someValue"); FaultContractWrapperException result = (FaultContractWrapperException)instance.HandleException(exception, Guid.NewGuid()); MockFaultContract fault = (MockFaultContract)result.FaultContract; Assert.AreEqual(exception.Message, fault.Message); Assert.AreEqual(exception.Data.Count, fault.Data.Count); Assert.AreEqual(exception.Data["someKey"], fault.Data["someKey"]); Assert.AreEqual(exception.OffendingNumber, fault.SomeNumber); }
public void ThrowOnNullFaultContract() { FaultContractWrapperException instance = new FaultContractWrapperException(null); }