【发布时间】:2019-12-04 15:56:25
【问题描述】:
在代码中是否有办法检查 SmtpClient 和 NetworkCredential 作为 HealthCheck 的一部分是否有效。 我不是特别想每 10 分钟生成一次电子邮件,但我想知道服务器是响应式的,更重要的是 NetworkCredentials 没有在我们不知道的情况下被重置 :-)
当前代码块是这样的;但据我所知,这并没有从服务中发出任何调用。
public bool IsHealthy()
{
try
{
var smtp = new SmtpClient(this.options.SmtpHost, this.options.SmtpPort)
{
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential(
this.options.EmailUserName,
this.options.EmailPassword,
this.options.EmailDomain)
};
// Should really be calling something in here?
smtp.Dispose();
return true;
}
catch
{
return false;
}
}
【问题讨论】:
-
你可以 ping 服务器(或 SMTP 端口上的 telnet)来检查它是否还活着。当然,它可能会在几秒钟后死掉,所以它永远不是 100% 的保证。在您真正尝试建立特定连接之前,您永远无法确定是否会建立连接。但作为一般的健康检查,它可能就足够了。如果可靠性是一个大问题,那么在 C# 应用程序本身中,您可以做更多的事情来处理故障(例如实现重试、指数退避、断路器等)。
-
stackoverflow.com/questions/372742/… 似乎您必须这样做并尝试使用谷歌搜索 - 已被多次询问和回答。
-
至于凭证,为什么会被重置?您不是使用具有固定密码的服务帐户吗?这听起来更像是组织流程问题,而不是技术问题。
-
凭据 :-) 是的,它们不应该改变;但在过去他们有,我们只是确保我们不会再次被抓住......
-
大,我怀疑它可能涉及下拉一层。我将查看我错过的另一个问题并回复答案。
标签: c# asp.net-core health-monitoring