【发布时间】:2016-08-15 13:57:13
【问题描述】:
当我在 Visuall Studio 中按 F5 对其进行测试时,它工作正常,我可以登录网页,并且 sql 查询过程运行良好。另请注意,我的 SQL 服务器在 Internet 上处于活动状态,可以使用 IP 地址访问。
但是当我在 myasp.net 托管服务提供商中发布我的 ASP.Net 网站时,我的登录屏幕运行良好。但问题是当我单击登录按钮时,我收到以下错误,在 VS 中测试时没有发生。
“/”应用程序中的服务器错误。访问被拒绝 描述:一个 当前 web 执行过程中发生未处理的异常 要求。请查看堆栈跟踪以获取有关 错误及其源自代码的位置。
异常详细信息:System.ComponentModel.Win32Exception:访问权限为 拒绝
来源错误:
在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈跟踪:
[Win32Exception (0x80004005): 访问被拒绝]
[SqlException (0x80131904): 网络相关或实例特定 建立与 SQL Server 的连接时出错。这 服务器未找到或无法访问。验证实例 名称正确且 SQL Server 配置为允许远程 连接。 (提供者:TCP 提供者,错误:0 - 访问被拒绝。)]
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份、SqlConnectionString 连接选项、SqlCredential 凭证、对象 providerInfo、字符串 newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool 池,字符串 accessToken,布尔值 applyTransientFaultHandling) +1005
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo, DbConnectionPool 池,DbConnection owningConnection, DbConnectionOptions 用户选项)+799
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +38
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)+726
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)+85
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean 允许创建、布尔型仅OneCheckConnection、DbConnectionOptions userOptions、DbConnectionInternal& 连接)+449
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1081 重试,DbConnectionOptions 用户选项、DbConnectionInternal oldConnection、DbConnectionInternal& 连接)+942
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection 外部连接,DbConnectionFactory 连接工厂, TaskCompletionSource1 retry, DbConnectionOptions userOptions) +1431 重试,DbConnectionOptions userOptions) +17
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) +1391 重试) +367 System.Data.SqlClient.SqlConnection.Open() +129
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
UserLogin_VB.Login.ValidateUser(Object sender, EventArgs e) +220
System.Web.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgs e) +109 System.Web.UI.WebControls.Login.AttemptLogin() +119
System.Web.UI.WebControls.Login.OnBubbleEvent(对象源,EventArgs e)+75 System.Web.UI.Control.RaiseBubbleEvent(对象源, EventArgs 参数)+37
System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +120
System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 事件参数)+166
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串 eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +31 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) +3450
【问题讨论】:
-
检查您的连接字符串,如果正确则一定是防火墙问题。
-
我认为您的提供商不会允许您访问这样的私有 sql。如果是这种情况,您将需要使用由您的 asp.net 提供商托管和支持的 sql。
-
@Dr.缝合 4,SQL 连接部分和防火墙非常完美,因为我的基于 Windows 的 exe 可以通过 IP 地址连接 sql 服务器在不同位置使用相同的连接字符串正常工作。还有其他建议吗?
-
@Sixthsense,所以您的 windows exe 也位于您的网站部署的服务器中?
-
@Sixthsense 他们很容易不允许这样做。默认情况下,您通常不允许访问托管 Web 上的任何外部资源,除非您实际请求它可以访问。在许多情况下,甚至不使用提供商支持的任何服务器都不是一种选择。