【问题标题】:How to get Fault detail in ChannelFactory<TChannel>.Faulted如何在 ChannelFactory<TChannel>.Faulted 中获取故障详细信息
【发布时间】:2011-12-12 03:30:16
【问题描述】:

我正在为 WCF ChannelFactory 管理器编写一些代码。我的问题来自事件“ChannelFactory.Faulted”:两个参数(“object sender”和“EventArgs args”)都不包含有关原始 fualt 的信息,如何在自定义故障处理程序中获取 ChannelFactory 故障详细信息?

   private ChannelFactory CreateFactoryInstance<T>(string endpointConfigurationName, string endpointAddress)
    {
        ChannelFactory factory = null;
        factory = new ChannelFactory<T>(endpointConfigurationName, new EndpointAddress(endpointAddress));
        //Customizing Factory Fault handler
        factory.Faulted += FactoryFaulted;
        factory.Open();
        return factory;
    }

    private void FactoryFaulted(object sender, EventArgs args)
    {
        ChannelFactory factory = (ChannelFactory)sender;            
        factory.Close();
        //...
        //How can I get more Fault detail, so as to throw a meaningful Exception?
        throw new ApplicationException("Failure in ChannelFactory ");
    }

感谢您的关注。

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    我对 ILSpy 进行了简短的查看,ChannelFactory 派生自 CommunicationObject,当在 Open/BeginOpen 期间抛出异常时,它可以转换为故障状态。所以 try/catch around Open 将至少捕获一些可能的错误。不确定是否还有其他地方可以使通道工厂进入故障状态。请注意,Faulted 事件处理程序是在 finally 块中调用的,这意味着它会在您捕获异常之前被调用。

    【讨论】:

    • 谢谢。因此,如果我停止在自定义故障处理程序 (FactoryFaulted) 中抛出新异常,调用者将可以使用原始异常。
    • @Whitesmell:好像是这样。附加到OpenedOpening 事件处理程序并在其中抛出FatalException,这应该会冒泡(只有事件处理程序中的致命异常会冒泡)。
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多