我正在通过我们所有的应用程序构建一组供内部使用的 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 时的正确行为,但我想我很久以前就看到了一些配置,以允许一些异常/故障通过服务边界。
有这样的事情吗?如果没有,你对我的情况有什么建议?
多谢!