我想知道如何正确关闭channelFactory。 实际上,我正在使用:

try
{
   factory.Close(TimeSpan.FromSeconds(0.25))
}
catch
{
   factory.Abort();
}

但是到ServiceHost端,未处理的异常到达域级别(应用程序的顶级)。 我不明白为什么服务主机不捕获异常并使用我配置的IErrorHandler处理它。

这是我配置ErrorHandler的方式:

IErrorHandler handler = new ErrorHandler();
foreach (var channelDispatcher in host.ChannelDispatchers.Select(d => d as ChannelDispatcher).Where(d => d != null))
{
    channelDispatcher.ErrorHandlers.Add(handler);
}

#1楼 票数:0

您应在调用Abort()之前检查工厂是否为空:

try
{
    factory.Close(TimeSpan.FromSeconds(0.25))
}
catch
{
    if (factory != null)
    {
        factory.Abort();
    }
    throw;
}

  ask by Nicolas Charette-Naud translate from so

未解决问题?本站智能推荐:

1回复

WCF中的动态通道工厂

我在我的WCF服务中使用以下代码来调用另一个可能是也可能不是WCF服务的Web服务。 所以我希望在xml文件中有一些信息,我从中读取各种服务端点,并希望将绑定信息传递给通道工厂,并根据配置XML文件中的信息调用其他服务。 所以我想每次使用不同的服务合同信息动态生成通道工厂。 是否可以
1回复

在C#中关闭/处置ServiceHost线程的正确方法?

我正在构建一个非常简单的服务器,它必须在.NET中使用命名管道,并将在Windows窗体GUI之后运行。 我已经能够在'Server'类(下面)中实现ServiceHost,并使用'Client'类与它进行通信。 我遇到的问题是找出关闭在线程上运行的ServiceHost的正确方法,以及在窗
1回复

使用通道工厂将身份验证令牌添加到WCF服务调用中

我使用以下内容创建了我的频道工厂。 我有以下令牌要添加到我正在调用的 WCF 请求的标头中。 我尝试添加 EndPoint 行为,但没有成功。 如何将授权不记名令牌添加到 WCF 请求标头中?
3回复

这是托管WCF服务的正确方法吗?

对于某些测试代码,我希望能够仅在几行中托管WCF服务。 我想我会写一个简单的托管类: 这可以像这样使用: 这种方法有什么问题吗? 代码中是否存在缺陷(尤其是关于处置)?
1回复

可以使用可移植类库通过通道工厂在Silverlight中使用WCF服务吗?

当前设置 :Silverlight客户端使用RIA类和生成的服务引用来消耗常规WCF服务。 目标 :用通道工厂和可移植类库(PCL)替换服务引用和RIA类。 (XY目标:摆脱生成的代码。) 迄今为止的方法 : 第一部分 - 使用渠道工厂 - 很简单,并且有很好的文档记录。 基本上
4回复

WCF错误:此工厂启用了手动寻址,因此必须预先发送所有发送的消息

我有一个托管的WCF服务,我为其创建了一个自定义工厂,这样就可以使用多个主机头: 我很确定我的配置文件现在在客户端和服务器上都是正确的( 可以在这里看到 )。 我得到的错误似乎与工厂有关: 此工厂已启用手动寻址,因此必须预先发送所有发送的消息。 该行return base.Cha
1回复

ChannelFactory:ChannelClose()没有关闭连接(netstat显示ESTABLISHED)

我有一个正在与 WCF 服务器通信的 WPF 应用程序。 我正在使用一个 ChannelFactory 为每个调用创建通道: 启动应用程序时有很多对服务器的请求,并且在某些时候它会停止并超时。 查看 netstat 我看到一些与服务器的 ESTABLISHED 连接, 当我将 ServicePoin
1回复

正确清理System.ServiceModel.ServiceHost

我对清理ServiceHost的最佳方法感到困惑。 我在代码中发现了问题,因为Visual Studio代码分析器发出了CA1001警告,建议我为我的类实现IDisposable接口。 我已经阅读了关于IDisposable的讨论并熟悉了典型的用例,但在这个例子中发现自己很困惑。 确保S