【问题标题】:Log exceptions thrown by WCF service constructor?WCF服务构造函数抛出的日志异常?
【发布时间】:2012-04-11 19:41:47
【问题描述】:

有什么方法可以捕获和记录 WCF 服务的构造函数抛出的异常?

使用自定义 IErrorHandler 创建自定义 IEndpointBehavior 似乎可以捕获所有异常除了在服务构建期间抛出的异常。 (如果我错了,请纠正我。)

我可以从 HTTP 响应中看到,这种情况最终会生成一个 System.ServiceModel.ServiceActivationException,但如果我可以从原始异常中注销详细信息会很有帮助。

【问题讨论】:

  • 为什么构造函数会出现异常?你在构造函数里做什么?
  • @KirkWoll 我不知道。这就是我想记录它们的原因。
  • 我问是因为我的构造函数中没有包含任何行为。因此,对我来说,抛出异常是不可能的。我很惊讶你的构造函数有行为。此外,ServiceActivationException 通常是由于配置错误造成的。换句话说,这意味着您的设置已损坏,通常不值得记录。
  • @KirkWoll 在这种特殊情况下,我碰巧有预感。一个构造函数正在从文件中读取服务配置数据。我认为一台特定服务器上的文件系统权限正在阻止这种情况。但我想找到一个通用的解决方案,这样我就不必只猜测什么时候出了问题,而且我碰巧没有附加调试器。

标签: c# wcf


【解决方案1】:

您可以使用 WCF 跟踪

http://msdn.microsoft.com/en-us/library/ms733025.aspx

您可以在服务配置中打开它,因此无需检测您的代码。

【讨论】:

    【解决方案2】:

    您需要创建一个类来记录异常,在构造函数中对其进行初始化,并在捕获到异常时调用它。下面是一个非常简单的例子:

    public class MyWcfService : IMyWcfService
    {
        private readonly IExceptionLogger_ exceptionLogger;
    
        public MyWcfService()
        {
            // Initialize dependencies
            _exceptionLogger = new ExceptionLogger();
    
            try
            {           
                // Code here that throws an exception
            }
            catch (Exception ex)
            {
                _exceptionLogger.LogException(ex);
            }
    
        } // end constructor
    
        // Other methods here
    
    } // end class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      相关资源
      最近更新 更多