我正在构建一组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时的正确行为,但我想我很久以前就看到了一些配置,允许一些异常/错误通过服务边界。
有这样的事吗?如果没有,你对我的案子有什么建议?
非常感谢!
答案 0 :(得分:0)
为了返回异常,您需要在服务实现上面添加 此格式的服务行为属性: [servicebehavior(ReturnUnknownExceptionAsFaults = true)] 请注意,此方法仅用于调试
利兰。
答案 1 :(得分:0)
不,我不这么认为 - 如果includeExceptionDetails设置设置为false,那么所有异常都是通用的(并且设计如此)。在这种情况下,我不知道有任何“漏洞”可以使某些错误详细显示出来。