0

我正在通过我们所有的应用程序构建一组供内部使用的 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 时的正确行为,但我想我很久以前就看到了一些配置,以允许一些异常/故障通过服务边界。

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

多谢!

4

2 回答 2

0

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

立然。

于 2010-05-11T11:57:37.730 回答
0

不,我不这么认为——如果 includeExceptionDetails 设置为 false,那么所有异常都是通用的(并且设计如此)。在那种情况下,我不知道有什么“漏洞”可以让一些故障详细显示出来。

于 2010-05-11T21:04:49.897 回答