C#Windows服务SQL Server连接问题
在Windows Server 2012上,我创建了一个以服务帐户运行的C#Windows服务。
在构造函数中,我使用ADO.NET从SQL Server数据库读取配置。
当我尝试启动该服务时,它会失败,并出现以下例外情况。 经过几次尝试启动服务后,该服务即将开始。
“等待操作超时连接超时过期,尝试使用登录前握手确认消失的超时时间。”
以下是来自Logs的异常消息
等待操作超时超时超时。 尝试使用登录前握手确认时超时时间已过。
这可能是因为登录前握手失败或服务器无法及时回应。
尝试连接到此服务器时花费的时间是 - [预登录]初始化= 21169; 握手= 332;
在system.Data.sqlclient.sqlinternalconnection.onError(sqlException异常,布尔断开连接,Action'l wrapcloseinAction)
在系统。 数据。 Sqlclient.TdsParser.ThrowExceptionAndwarning(TdsParserStateobject stateobj,Boolean callerHasconnectionLock,Boolean asyncclose)
在system.Data.sqlclient.TdsParserstateoblect.ReadsniError(TdsParserstateobject stateobj,unt32错误)
在system.Data.sqlclient.TdsParserstateoblect.ReadsnisyncoverAsync()
在系统。 数据。 Sqlclient.TdsParserStateob)ect.TryReadNetworkPacket()
在系统。 数据。 Sqlclient.TdsParser.consumePreLoginiiandshake(布尔加密,布尔trustservercert,布尔integratedsecurity,布尔&marscapable)
在system.Data.sqlclient.TdsParser.connect(serverinfo serverinfo,sqlinternalconnectionTds connHandler,布尔ignoresniopenTimeout,1nt64 timerExpire,布尔加密,布尔trustservercert,布尔integratedsecurity,布尔withFailover)
在system.Data.sqlclient.sqlinternalconnectionTds.AttemptoneLogin(serverinfo服务器信息,字符串newPassword,securestring newsecurePassword,布尔ignoresniopenTimeout,TimeoutTimer超时,布尔withFailover)
在system.Data.sqlclient.sqlinternalconnectionTds.LoginNoFailover(serverinfo serverinfo,字符串newPassword,securestring newsecurePassword,布尔redirecteduserinstance,sqlconnectionstring连接选项,sqlcredential凭据,超时计时器超时)
在system.Data.sqlclient.sglinternalconnectionTds.openLoginEnlist(TimeoutTimer超时,sqlconnectionstring连接选项,sqlcredential凭证,字符串newPassword,securestring newsecurePassword,布尔redirecteduserinstance)
在system.Data.sqlclient.sqlinternalconnectionTds..ctor(DbconnectionPoolidentity标识,sqlconnectionstring连接选项,sqlcredential凭据,对象providerinfo,字符串newPassword,securestring newsecurePassword,布尔redirecteduserinstance,sqlconnectionstring userconnectionoptions,sessionData reconnectsessionData)
在system.Data.sqlclient.sqlconnectionFactory.createconnection(Dbconnectionoptions选项,DbconnectionPoolKey poolKey,对象poolGroupProviderinfo,DbconnectionPool池,Dbconnection owningconnection,Dbconnectionoptions用法)
在system.Data.ProviderBasembconnectionFactory.createPooledconnection(DbconnectionPool池,Dbconnection拥有对象,Dbconnectionoptions选项,DbconnectionPoolKey poolKey,Dbconnectionoptions用法)
在system.Data.ProviderBasembconnectionPool.createobject(Dbconnection拥有对象,Dbconnectionoptions用法,Dbconnection内部旧连接)
在system.Data.ProviderBasembconnectionPool.usercreateRequest(Dbconnection拥有对象,Dbconnectionoptions用途,Dbconnection内部旧连接)
在system.Data.ProviderBasembconnectionPool.TryGetconnection(Dbconnection拥有对象,uInt32 waitFormultipleobjectsTimeout,布尔allowcreate,布尔onlyonecheckconnection,Dbconnectionoptions useroptions,Dbconnectioninternal&连接)
在system.Data.ProviderBase.DbconnectionPool.TryGetconnection(Dbconnection拥有对象,Taskcompletionsource'l重试,Dbconnectionoptions用法,Dbconnection内部和连接)
在system.Data.ProviderBasembconnectionFactory.TryGetconnection(Dbconnection拥有连接,Taskcompletionsource'l重试,Dbconnectionoptions用法,Dbconnectioninternal旧连接,Dbconnectioninternal和连接)
在system.Data.ProviderBase.Dbconnectioninternal.Tryopenconnectioninternal(DBConnection的outerconnection,DbconnectionFactory connectionFactory的,Taskcompletionsource'l重试,Dbconnectionoptions USEROPTIONS)在system.Data.ProviderBasembconnectionclosed.Tryopenconnection(DBConnection的outerconnection,DbconnectionFactory connectionFactory的,Taskcompletionsource'l重试,Dbconnectionoptions USEROPTIONS)在系统.Data.sqlclient.sqlconnection.Tryopeninner(Taskcompletionsource'l重试)在system.Data.sqlclient.sqlconnection.Tryopen(Taskcompletionsource'l重试)在system.Data.sqlclient.sqlconnection.open()
在连接字符串中添加“MultiSubnetFailover = True”后问题解决
感谢大家的帮助。
链接地址: http://www.djcxy.com/p/56709.html