如何在WCF的配置文件中指定允许的异常?

时间:2010-05-11 11:18:06

标签: wcf json exception return webhttp

我正在构建一组WCF服务,供所有应用程序内部使用。对于异常处理,我创建了一个默认的错误类,所以我可以将处理过的消息返回给调用者(如果是大小写的话),或者当我不知道发生了什么时,将其返回给通知者。

错误合同:


    [DataContract(Name = "DefaultFault", Namespace = "http://contoso.com/api/2010/03")]
    public class DefaultFault
    {           
        public DefaultFault(DefaultFaultItem[] items)
        {
            if (items == null || items.Length== 0)
            {
                throw new ArgumentNullException("items");
            }

            StringBuilder sbItems = new StringBuilder();

            for (int i = 0; i 

Specifying that my method can throw this exception so the consuming client will be aware of it:

        [OperationContract(Name = "PlaceOrder")]
        [FaultContract(typeof(DefaultFault))]
        [WebInvoke(UriTemplate = "/orders", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, Method = "POST")]
        string PlaceOrder(Order newOrder);

大部分时间我们只使用.NET与.NET通信绑定,一切正常,因为我们说的是同一种语言。但是,正如您在服务合同声明中所看到的,我有一个WebInvoke属性(以及一个webHttp绑定),以便能够与JSON交谈,因为我们的一个应用程序将为iPhone构建,这个人会说JSON。

我的问题是,每当我抛出一个FaultException并在配置文件中包含includeExceptionDetails =“false”时,调用客户端将获得一般HTTP错误而不是我的自定义消息。

我知道这是关闭includeExceptionDetails时的正确行为,但我想我很久以前就看到了一些配置,允许一些异常/错误通过服务边界。

有这样的事吗?如果没有,你对我的案子有什么建议?

非常感谢!

2 个答案:

答案 0 :(得分:0)

为了返回异常,您需要在服务实现上面添加 此格式的服务行为属性: [servicebehavior(ReturnUnknownExceptionAsFaults = true)] 请注意,此方法仅用于调试

利兰。

答案 1 :(得分:0)

不,我不这么认为 - 如果includeExceptionDetails设置设置为false,那么所有异常都是通用的(并且设计如此)。在这种情况下,我不知道有任何“漏洞”可以使某些错误详细显示出来。