Вы можете попробовать включить исключение в сбое в службе отдыха.
catch (Exception ex)
{
Log.Fatal("Could not complete process", ex);
throw new WebFaultException<string>(
string.Format(ex.Message),
HttpStatusCode.BadRequest);
}
Приведенный выше код будет обрабатывать оба сценария, при условии, что у вас включен регистратор, вы можете просто получить файлы журнала на сервере.клиент получит сообщение об исключении
Полагаю, вы могли бы просто отправить клиенту дружеское сообщение, чтобы они ничего не касались вашей конкретной реализации, или просто создать класс, который вы можете вызвать
WebFaultException
с.
РЕДАКТИРОВАТЬ 2
Если вы получаетеперед тем, как получить запрос, попробуйте следующее
Добавить FaultHandler в свою службу
[System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class GenericErrorHandlingBehavior : Attribute, IErrorHandler, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
//throw new NotImplementedException();
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
//throw new NotImplementedException();
// Adds a CoreServiceBehavior to each ChannelDispatcher
foreach (var channelDispatcherBase in serviceHostBase.ChannelDispatchers)
{
var channelDispatcher = channelDispatcherBase as ChannelDispatcher;
channelDispatcher.ErrorHandlers.Add(new GenericErrorHandlingBehavior());
}
}
public bool HandleError(Exception error)
{
//throw new NotImplementedException();
return true;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
if (error is FaultException)
return;//nothing to do if the error is a fault
//the type cannot be determined[ default to this value]
var exception = new FaultException<GenericServiceFault>(
new GenericServiceFault(), new FaultReason(error.Message));
MessageFault messageFault = exception.CreateMessageFault();
fault = Message.CreateMessage(version, messageFault, exception.Action);
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
//throw new NotImplementedException();
}
}
Класс GenericServiceFault
- это просто простой класс DataContract. Вы можете затемЗарегистрируйте ошибку в методе ProvideFaultMethod
или HandleError
и предоставьте пользователю значимую ошибку
. Вы можете использовать GenericErrorHandlingBehavior
в своей реализации сервиса в качестве атрибута, то есть [GenericErrorHandlingBehavior]