Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ChannelFactory中获取故障详细信息<;t频道>;。错误的_C#_.net_Wcf - Fatal编程技术网

C# 如何在ChannelFactory中获取故障详细信息<;t频道>;。错误的

C# 如何在ChannelFactory中获取故障详细信息<;t频道>;。错误的,c#,.net,wcf,C#,.net,Wcf,我正在为WCF ChannelFactory经理编写一些代码。我的问题来自事件“ChannelFactory.Faulted”:参数(“objectsender”和“EventArgs args”)都不包含关于原始fualt的信息,如何在自定义故障处理程序中获取ChannelFactory故障详细信息 private ChannelFactory CreateFactoryInstance<T>(string endpointConfigurationName, string

我正在为WCF ChannelFactory经理编写一些代码。我的问题来自事件“ChannelFactory.Faulted”:参数(“objectsender”和“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 ");
    }
专用通道工厂CreateFactoryInstance(字符串endpointConfigurationName,字符串endpointAddress)
{
ChannelFactory=null;
工厂=新的ChannelFactory(endpointConfigurationName,新的EndpointAddress(EndpointAddress));
//自定义工厂故障处理程序
factory.Faulted+=FactoryFaulted;
factory.Open();
返回工厂;
}
private void FactoryFaulted(对象发送方、事件args args)
{
ChannelFactory=(ChannelFactory)发送方;
工厂关闭();
//...
//如何获取更多的错误细节,以便抛出有意义的异常?
抛出新的ApplicationException(“ChannelFactory中的故障”);
}

感谢您的关注。

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

谢谢。因此,如果我停止在自定义错误处理程序(FactoryFaulted)中抛出新异常,则调用方将可以使用原始异常。@WhiteMell:似乎是这样。附加到
打开的
打开的
事件处理程序,并在其中抛出一个
FatalException
,这应该会冒泡(只有事件处理程序内的致命异常才会冒泡)。