首页 文章

SMTP退出响应不会关闭与IIS服务的连接

提问于
浏览
1

我们在smtp实现中面临一个问题,我们似乎无法解决 .

为了得出结论,这是我们目前的设置:

服务器A运行.NET服务,处理来自我们应用程序的排队电子邮件(生成的报告将发送给客户端)这是通过使用.NET SMTPClient完成的,使用using块来调用smtpclient实例的配置( . NET 4.0),强制发送QUIT命令 .

然后将邮件发送到运行IIS6的服务器B并处理SMTP连接,并将邮件发送到客户端的邮箱 .

现在的问题是(从日志中看到):在服务器A上的.NET服务上的客户端的配置将向服务器B发送一个QUIT . 服务器B然后将QUIT命令发送到客户端的邮件主机,并且它的邮件主机似乎以221响应,关闭连接 . 但是,服务器B从不代表服务器A,因此.NET服务和IIS SMTP服务器之间的连接保持打开状态,直到它们用完可用连接,阻止所有新电子邮件消息 . (到那时大约有64k的开放连接)

原理图,它是这样的:

.NET SMTP服务(服务器A)--MSG - > IIS 6 SMTP服务器(服务器B)--MSG - >客户端

.NET SMTP服务(服务器A) - QUIT - > IIS 6(服务器B) - 请求 - >客户端

.NET SMPT服务(服务器A)< - X-- IIS 6(服务器B)< - 221(已关闭) - 客户端

这里有人可以指出我们的问题/知道如何解决这个问题吗?我无法在互联网上找到类似的问题......

非常感谢提前!

Update

值得一提的是:我现在尝试使用ServicePoint.ConnectionLeaseTimeout并将其设置为特定的超时,而不是让它在无限时间内打开 . 也许这不是最干净的解决方案,但如果它关闭了服务器之间的所有开放连接,并且在许多人保持打开时不阻止新连接,那么我们的初始问题至少得到解决......但我们需要先做一些测试在此之前可以放心 .

1 回答

  • 1

    根据this,2.0框架中存在一个错误,即SMTPClient没有发送QUIT,在v4中已修复 . 可能是实施中仍然存在错误 . (我不害怕 . 可能值得在MS网站上发布这个错误 .

    (链接发现谷歌搜索“smtpclient不释放插座”)

    干杯 -

相关问题