让我描述一下我们的环境:
- 我们的 DMZ 中有一个应用程序服务器(MS Windows Server)和 IIS 服务器,ASP.NET 应用程序在这里运行。
- 我们的 LAN 中有数据库服务器(MS SQL Server 和 Oracle)
- DMZ 和 LAN 之间有 Fortinet 防火墙
我们曾经从 DMZ 中的 Windows Server 绕过到 LAN 中的 MS SQL Server(物理电缆)。这有一些历史原因...
最近,我们删除了这个旁路,所有通信现在都通过防火墙。从这一刻开始,以下问题开始了:
1) 应用程序尝试与 SQL server 通信时随机出现以下错误。它只是有时发生,它是随机的......有时它可以工作,但几分钟后会发生错误,之后又会再次工作。我们在固件日志中看不到任何内容(或者我们不知道具体在哪里查看)。
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.) System.ComponentModel.Win32Exception (0x80004005): The semaphore timeout period has expired
Source:
StackTrace:
at Page_Load(Object sender, EventArgs e) in test2.aspx.cs:line 16
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
2) 应用程序尝试与 Oracle 服务器通信时会发生类似错误。再次,它随机发生......
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Source: System
StackTrace: at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at OracleInternal.Network.ReaderStream.Read(OraBuf OB)
我们不认为这是 ASP.NET 应用程序本身的问题。该问题影响来自不同供应商的所有 ASP.NET 应用程序。