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

时间:2014-01-07 10:22:47

标签: c# iis smtp iis-6 smtpclient

我们在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 - > CLIENT

.NET SMTP服务(服务器A) - QUIT - > IIS 6(服务器B) - QUIT - > CLIENT

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

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

提前多多感谢!

更新

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

1 个答案:

答案 0 :(得分:1)

根据this,2.0框架中存在一个错误,即SMTPClient没有处置并且没有发送QUIT,在v4中已修复。可能是实施中仍然存在错误。 (我没有可用于测试的SMTP服务器,我担心。可能值得将此作为MS网站上的错误发布。

(链接发现谷歌搜索“smtpclient没有释放套接字”)

干杯 -