Есть несколько вещей, которые необходимо сделать, чтобы исключить появление пузыря по HTTP-каналу к клиенту.
Вы должны присвоить свой класс DataService следующим образом:
[ServiceBehavior (IncludeExceptionDetailInFaults = true)] открытый класс MyDataService: DataService
Необходимо включить подробные ошибки в конфигурации:
public static void InitializeService (DataServiceConfiguration config) {config.UseVerboseErrors = true;}
Лучше всего бросить DataServiceException в.Среда выполнения службы данных WCF знает, как сопоставить свойства с ответом HTTP, и всегда обернет его в TargetInvocationException .
[WebGet]
public Entity OperationName(string id)
{
try
{
//validate param
Guid entityId;
if (!Guid.TryParse(id, out entityId))
throw new ArgumentException("Unable to parse to type Guid", "id");
//operation code
}
catch (ArgumentException ex)
{
throw new DataServiceException(400, "Code", ex.Message, string.Empty, ex);
}
}
Затем можно распаковать его для клиента-клиента, переопределивHandleException в вашем DataService примерно так:
/// <summary>
/// Unpack exceptions to the consumer
/// </summary>
/// <param name="args"></param>
protected override void HandleException(HandleExceptionArgs args)
{
if ((args.Exception is TargetInvocationException) && args.Exception.InnerException != null)
{
if (args.Exception.InnerException is DataServiceException)
args.Exception = args.Exception.InnerException as DataServiceException;
else
args.Exception = new DataServiceException(400, args.Exception.InnerException.Message);
}
}
См. здесь для получения дополнительной информации ...