WCF数据服务错误处理

时间:2011-03-02 08:19:20

标签: wcf

我已经使用服务操作创建了一个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

任何想法?

非常感谢。

3 个答案:

答案 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)

您可以使用WCF FaultContract属性来抛出和处理businzess异常。

参考LinkExample

答案 2 :(得分:0)

我使用Set EntitySetAccessRule解决了我的403错误到AllRead:

         config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);