wcf - 如何从 Web 服务中获取异常?

标签 wcf web-services exception error-handling

当我从项目解决方案中引用它时,我有一个运行完美的 Web 服务。一旦我将它上传到远程服务器,它就开始爆炸。不幸的是,我得到的唯一错误消息是在客户端“用户代码未处理故障异常”。在 Web 服务内部,我在所有方法中都处理了异常,所以我很确定它在某个地方被捕获,但我不知道如何看到它。我怀疑问题与权限有关,但我看不到它发生在哪里。

我尝试将错误消息放入对象返回中,但仍然没有成功;像这样的东西:

public bool SetDirectReports(ADUser user)
{
    try
    {
        var adEntry = new DirectoryEntry(string.Format("LDAP://<GUID={0}>", user.Guid), "administrator", "S3cur1ty");
        if (adEntry.Properties["directReports"].Count > 0)
        {
            user.DirectReports = new List<ADUser>();
            foreach (string directReport in adEntry.Properties["directReports"]) //is being returned as full distinguished name
            {
                var dr = new DirectoryEntry(string.Format("LDAP://{0}", directReport), "administrator", "S3cur1ty");
                user.DirectReports.Add(GetUserByGuid(dr.NativeGuid));
            }
            return true;
        }
        else
        {
            user.DirectReports = new List<ADUser>();
            return false;
        }
    }
    catch (Exception ex)
    {
        user.HasError = true;
        user.ErrorMessage = "Error setting direct reports: " + ex.Message;
        return false;
    }

}

但它仍然没有捕获。我希望有更好的方法。我不确定是否可以添加一些将异常输出到控制台的内容或什么。任何帮助,将不胜感激。 TIA

附言这不一定是崩溃的方法,服务中有一个它们的网络。

最佳答案

您应该将所有异常转储到服务器端的日志文件中;将错误信息暴露给客户端是一个潜在的安全风险,这就是它默认关闭的原因。

如果你真的想向客户端发送异常信息,你可以打开它。如果您正在使用 WCF 服务,您应该为服务行为设置“includeExceptionDetailsInFaults”属性,如 dealing with unhandled exceptions in WCF 上的这篇 MSDN 文章中所述。 .完成后,您将在 FaultException 上拥有房产。调用Detail它本身应该是 Exception 的类型.

为了更好地处理错误,您还应该使用 FaultContract 查看类型错误。和 FaultException<>类(class);这些的好处是它们不会使 channel 进入故障状态并且可以正确处理:

try
{
    // do stuff here
}
catch (Exception ex)
{
    var detail = new CustomFaultDetail 
    {
       Message = "Error setting direct reports: " + ex.Message
    };

    throw new FaultException<CustomFaultDetail>(detail);
}

如果您使用的是 ASP.NET Web 服务,您应该设置 customErrors在 web.config 中将模式设置为“关闭”。这会将整个异常详细信息作为 HTML 发送回,客户端应将其作为其接收的 SOAP 异常的一部分接收。

关于wcf - 如何从 Web 服务中获取异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9604974/

相关文章:

c# - WCFTestClient 通过禁用 TLS 1.0 和 TLS 1.1 给出错误消息

web-services - XML-RPC 是否不好用作公共(public) API 实现的协议(protocol)?

java - 如何在 java 中再次抛出 IOException?

java - 非法状态异常 : Already Connected while connecting to a HttpURL

wpf - 使用 protobuf-net RuntimeTypeModel 和使用 WPF 客户端预编译时出现的问题

c# - 具有通用集合的 WCF REST 服务

android - 与网络同步的应用程序

java - java中使用assert和抛AssetionError异常的区别

wcf - WCF 服务中的 *Result 和 *ResultSpecified 参数?

rest - 创建具有关系的 REST 端点的正确方法是什么