我已经使用服务操作创建了一个WCF数据服务。
我想生成一种Business异常。我尝试生成WebFaultException
,但是当服务操作抛出此错误时,我看不到如何在客户端捕获此错误。
这是我模拟异常的服务操作:
[WebGet]
public void GenerateException()
{
throw new DataServiceException( 403, "Custom Message" );
}
这是我的客户:
WebClient wc = new WebClient();
wc.DownloadString(
new Uri(
"http://localhost:27820/WcfDataService1.svc/GenerateException"
)
);
DownloadString
正在抛出异常,但它只是Internal Server Error
,我看不到我的Custom Message
。
任何想法?
非常感谢。
答案 0 :(得分:3)
最好抛出DataServiceException。 WCF数据服务运行时知道如何将属性映射到HTTP响应,并始终将其包装在TargetInvocationException中。
然后,您可以通过覆盖DataService中的HandleException来为客户端使用者解压缩,如下所示:
/// <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);
}
}
答案 1 :(得分:3)
答案 2 :(得分:0)
我使用Set EntitySetAccessRule解决了我的403错误到AllRead:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);