首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET WebChannelFactory服务代理使连接保持打开状态,即使它已被释放

.NET WebChannelFactory服务代理使连接保持打开状态,即使它已被释放
EN

Stack Overflow用户
提问于 2012-05-02 02:57:56
回答 2查看 863关注 0票数 2

我有以下代码:

代码语言:javascript
复制
using (var fact = new WebChannelFactory<IService<Message>>(binding,
              commsSettings.MessageEndPoint()))
{
    using (IDisposable channel = (IDisposable)fact.CreateChannel())
    {
         service = (IService<Message>)channel;
         service.Create(AlertMessage);
         ((IClientChannel)channel).Close();
    }
    fact.Close();
}

即使我正在处理WebChannelFactory和通道本身,它们仍然使连接保持打开状态。我之所以知道这一点,是因为在性能测试中,调用在第10次调用时开始超时,如果我在命令行执行netstat -a,我可以看到在我的本地计算机和它自己的端口80之间打开了一大堆套接字。

如何使代理关闭其套接字?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-03 05:34:14

问题出在服务器端。我们的每个服务实例都有一个signal-R客户端泄漏,这耗尽了可用的套接字。

当这种情况发生时,客户端将无法再进行连接。

给其他调试类似东西的人一个提示:看看你的服务器,看看它是不是在构造某种WCF客户端,而不是清理它们。暴露它的症状是,在客户端进程终止后,使用netstat -a看到的套接字仍然保持在已建立的状态。

票数 2
EN

Stack Overflow用户

发布于 2012-05-02 03:21:56

不幸的是,微软在WCF中实现服务代理(IClientChannel及其继承者)的方式允许在Close/Dispose方法中发生异常。发生这种情况时,必须调用Abort方法来释放非托管资源(在本例中为TCP套接字)。在这个问题上查看此brief blog post,并实现它所描述的dispose模式,而不是using语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10402703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档