我有一个托管在 IIS 8.5 上的 ASP.NET MVC 应用程序。该站点将在数小时到数天之间正常运行,但在尝试连接到另一台计算机上通过 net.tcp 托管的 WCF 服务时最终开始出现 EndpointNotFoundException。
如果我尝试使用不同的应用程序池、控制台应用程序等从 IIS 机器连接到 WCF 服务,它们都会毫无错误地连接。也不是每一次连接尝试都失败了,只是大多数连接尝试都失败了。
一旦我回收应用程序池,一切都会重新开始工作。
在 EndpointNotFoundException 开始出现之前,我在事件查看器中看不到任何内容,并且 Elmah 没有显示其他错误。
我将所有 WCF 调用都包装在 try/catch 块中,这些块将执行必要的关闭/中止命令,以确保所有客户端都正确关闭。这是正在使用的代码。
try
{
action();
}
finally
{
try
{
client.Close();
}
catch
{
client.Abort();
}
}
我还创建了一个监视服务器的应用程序。如果它发现服务器开始出现错误,它会尝试使用以下代码回收应用程序池:
var serverManager = new ServerManager();
var pool = serverManager.ApplicationPools.Single(p => p.Name == "POOLNAME");
pool.Recycle();
但是,即使此代码也不能阻止异常。我必须手动登录机器,打开 IIS 管理器,右键单击应用程序池,然后单击回收。
我在 Winforms 和 Windows 服务等应用程序中还有其他几个 WCF 服务器/客户端,它们没有这个问题。只有托管在 IIS 上的客户端应用程序出现问题。
有关如何追踪导致此错误的原因的任何建议?