asp.net - 为什么这个后端异常发生在 MySql.Data.MySqlClient.MySqlConnection.Open() 中的 "System.IO.IOException"?

标签 asp.net eof database-connection servicepointmanager httpunhandledexception

堆栈跟踪详细信息:

System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.AggregateException: One or more errors occurred. ---> System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream.
at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at MySql.Data.MySqlClient.NativeDriver.StartSSL()
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at WebAppClassLibrary.MySqlShell.ExecuteScalar(String query, MySqlConnection mySqlConnection, MySqlParameter[] mySqlParameters) in N:\webApp\WebAppClassLibrary\MySqlShell.cs:line 147
at WebAppClassLibrary.ServiceOperations.GetServiceType(Int32 login) in N:\webApp\WebAppClassLibrary\ServiceOperations.cs:line 57
at WebAppClassLibrary.PartnerDetailLibrary.GetAccountData(PartnerDetailAccount partnerDetailAccount, MySqlConnection mtInstaConnection, MySqlConnection secureConnection, MySqlParameter paramStartTime, MySqlParameter paramEndTime, Dictionary`2 lastActivity, Dictionary`2 balances, Boolean exactPeriod, Boolean allowProfit, Boolean allowEquity, Boolean allowAdditionalPercentFor, Boolean usingCache, Boolean IsCryptoOnly, Double minCommission, Boolean showAgent) in N:\webApp\WebAppClassLibrary\PartnerDetailLibrary.cs:line 40
at PartnerDetail.<>c_DisplayClass118_0.<FillDataGridByClients>b_1(Int32 i) in N:\webApp\WebApp\PartnerDetail.aspx.cs:line 0
at System.Threading.Tasks.Parallel.<>c_DisplayClass17_0`1.<ForWorker>b_1()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c_DisplayClass176_0.<ExecuteSelfReplicating>b_0(Object )
— End of inner exception stack trace —
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
at PartnerDetail.FillDataGridByClients(Int32 from, Int32 to) in N:\webApp\WebApp\PartnerDetail.aspx.cs:line 1129
at PartnerDetail.BtnSearchClick(Object sender, EventArgs e) in N:\webApp\WebApp\PartnerDetail.aspx.cs:line 566
at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
---> (Inner Exception #0) System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream.
at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at MySql.Data.MySqlClient.NativeDriver.StartSSL()
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at WebAppClassLibrary.MySqlShell.ExecuteScalar(String query, MySqlConnection mySqlConnection, MySqlParameter[] mySqlParameters) in N:\webApp\WebAppClassLibrary\MySqlShell.cs:line 147
at WebAppClassLibrary.ServiceOperations.GetServiceType(Int32 login) in N:\webApp\WebAppClassLibrary\ServiceOperations.cs:line 57
at WebAppClassLibrary.PartnerDetailLibrary.GetAccountData(PartnerDetailAccount partnerDetailAccount, MySqlConnection mtInstaConnection, MySqlConnection secureConnection, MySqlParameter paramStartTime, MySqlParameter paramEndTime, Dictionary`2 lastActivity, Dictionary`2 balances, Boolean exactPeriod, Boolean allowProfit, Boolean allowEquity, Boolean allowAdditionalPercentFor, Boolean usingCache, Boolean IsCryptoOnly, Double minCommission, Boolean showAgent) in N:\webApp\WebAppClassLibrary\PartnerDetailLibrary.cs:line 40
at PartnerDetail.<>c_DisplayClass118_0.<FillDataGridByClients>b_1(Int32 i) in N:\webApp\WebApp\PartnerDetail.aspx.cs:line 0
at System.Threading.Tasks.Parallel.<>c_DisplayClass17_0`1.<ForWorker>b_1()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c_DisplayClass176_0.<ExecuteSelfReplicating>b_0(Object )<---

at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.agentsdetalization_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\79e9f1d9\6267efd7\App_Web_fixgkyq0.4.cs:line 0
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我收到此后端异常,但肯定在每 1000 个请求中大约出现 1 或 2 次。尽管我试图通过不同的方式来解决这个问题,但除了进退两难之外,找不到任何解决方案。

我经历了this question类似于我的异常,但目前还没有解决方案。我还找到了this question ,但现在陷入两难境地,我的异常(exception)的解决方案是什么。我试着在方法 Global.asax.cs/Application_BeginRequest() 中写下这行代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

注意:我的应用程序的目标 .NET 框架 版本是 4.7,我必须在我的应用程序代码中修复这个异常。我无权在服务器上工作。所以,请帮助我,如果我是在正确的方式与否。另外,请确保这行代码是否与我的异常相关。如果这是正确的,我应该在上面的代码行中使用按位速记运算符“|=”代替“=”吗?

提前致谢。

更新: 完整的堆栈跟踪和异常详细信息添加在代码块的底部,因为有些人要求帮助理解。 请注意,james-mead的答案还行不通。我想请专家提供更多答案以摆脱此异常。我真的被困在这一点上。

最佳答案

改变:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

收件人:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)12288
                                     | (SecurityProtocolType)3072
                                     | (SecurityProtocolType)768;
                                     | SecurityProtocolType.Tls;

显然,您需要在发出第一个 HTTP 请求之前运行此代码。为确保使用最新的 TLS 版本,您需要 try catch 它。像这样:

try {
    ServicePointManager.SecurityProtocol = (SecurityProtocolType) 12288
            | (SecurityProtocolType) 3072
            | (SecurityProtocolType) 768
            | SecurityProtocolType.Tls;
} catch (NotSupportedException) {
    try {
        ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072
                | (SecurityProtocolType) 768
                | SecurityProtocolType.Tls;
    } catch (NotSupportedException) {
        try {
            ServicePointManager.SecurityProtocol = (SecurityProtocolType) 768
                    | SecurityProtocolType.Tls;
        } catch (NotSupportedException) {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
        }
    }
}

关于asp.net - 为什么这个后端异常发生在 MySql.Data.MySqlClient.MySqlConnection.Open() 中的 "System.IO.IOException"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62841978/

相关文章:

java - 某些网站/应用程序可以为未登录的用户使用 "session variables"吗?

c# - 如何将自定义对象从异步操作过滤器传递到 ASP.net Core 中的 Controller ?

c++ - 带 POST 的 curl_easy_perform 等待 EOF

newline - Sublime Text 3-确保文件末尾只有一个尾随换行符

java - 如何允许桌面应用程序访问 Microsoft 服务器上的 MySQL 数据库?

asp.net网站到手机/平板电脑

c# - 如何从C#.net中的URL创建网站缩略图?

Vim 在最后一行或 eof 没有行尾

Excel内部数据库连接

design-patterns - jdbc连接中使用了哪种设计模式?