c# - Try/Catch 在 VS 2010 中未捕获异常

标签 c# wcf visual-studio-2010 try-catch

我在 VS2010 C# 中遇到了一个非常奇怪的情况。我正在使用 WCF PubSub 框架,并通过 netTcpBinding 进行回调。奇怪的是,在我的大型解决方案中的一个代码块中,抛出了一个异常(我完全期望并正在编码),但调试器停止显示抛出的异常,就好像没有 try 或 catch 一样。现在,当我在 VS 外部将应用程序作为 .exe 运行时,程序不会崩溃,并且会相应地处理异常。更奇怪的是,当我在一个新的空白解决方案中创建这个应用程序的轻量级版本时,在 Debug模式下 VS 中捕获了异常,但是当我再次将这个相同的轻量级项目添加到原始大型项目中时,异常没有被捕获。这是代码块,尽管我认为问题与 VS 中此解决方案的设置有关,但这是我唯一的猜测。

基本上,当客户端意外关闭并且服务尝试发送到故障客户端/订阅者时,catch 将处理此问题并从列表中删除订阅者。 _subscribers 列表是静态只读列表。我尝试过使服务成为单例,而不是在列表中使用 static 关键字,但这似乎没有什么区别。由于显而易见的原因,我无法压缩并发布该解决方案所在的整个解决方案。

public void UpdateData(Action<T> action)
{
 _subscribers.ForEach(subscriber =>
           {
               var client = subscriber as ICommunicationObject;
               try
               {
                 if (client != null && client.State == CommunicationState.Opened)
                     action(subscriber);
                 else
                     Unsubscribe(subscriber);
               }
               catch
               {
                 Unsubscribe(subscriber);
               }
            }
 );
}   

最佳答案

我会查看您的异常(exception)设置。我会考虑用以下更清晰的逻辑替换:

           try
           {
             if (client != null && client.State == CommunicationState.Opened)
                 action(subscriber);

           }
           finally
           {
             Unsubscribe(subscriber);
           }

关于c# - Try/Catch 在 VS 2010 中未捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413116/

相关文章:

c# - 使用 NHibernate 和 CaSTLe WCF 工具在 WCF 上下文中处理 Rebus 消息

visual-studio-2010 - Azure - 从 VStudio 发布

c# - 这是有益的 : Calling C code from C# or Converting C code into C#

c# - 如何将文档 xml 文件构建到适当的路径?

c# - 将多态列表合并为一个列表并获取派生类型

c# - 最好的 NHibernate 缓存 L2 提供程序是什么?

wcf - 如何在.NET Core 3.1中从F#访问WCF服务?

linux - 如何在 Linux 服务器上安装 SSL 证书

c++ - 可以抛出具有私有(private)拷贝构造函数的对象吗?

c# - Visual Studio 2010 C# 单行编译器