这个标题很可能让大多数人感到困惑,所以我会彻底解释一下。
这是我得到的错误:
当应用程序未在 UserInteractive 模式下运行时显示模式对话框或表单不是有效操作。指定 ServiceNotification 或 DefaultDesktopOnly 样式以显示来自服务应用程序的通知。
但是,它不会因为在服务器端使用 MsgBox 而被抛出。
混合中的另一个扳手,这只发生在我们当前的生产服务器上。测试服务器的设置与生产环境相同(除了 SSL 证书不同,但这无关紧要),运行完美。开发机器也可以正常工作。
当前在 VB 代码隐藏中使用的代码:
Dim DBconn As New OracleConnect 'Custom class file
Try
DBconn.Open(Uname, Pword, SelServ)
If DBconn Is Nothing Then
errorLabel.Text = "Authentication did not succeed. Check user name and password."
Exit Sub
Else
groups = DBconn.GetUserRole()
'Create the ticket, and add the groups.
Dim isCookiePersistent As Boolean = chkPersist.Checked
Dim authTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
txtUsername.Text, DateTime.Now, DateTime.Now.AddMinutes(60), isCookiePersistent, groups)
'Encrypt the ticket.
Dim encryptedTicket As String = FormsAuthentication.Encrypt(authTicket)
'Create a cookie, and then add the encrypted ticket to the cookie as data.
Dim authCookie As HttpCookie = New HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
If (isCookiePersistent = True) Then
authCookie.Expires = authTicket.Expiration
End If
'Add the cookie to the outgoing cookies collection.
Response.Cookies.Add(authCookie)
'set session variables
Session("UID") = txtUsername.Text
Session("PWD") = txtPassword.Text
Session("selServ") = StrServer.SelectedValue
SetupTableNames()
'MsgBox(groups, MsgBoxStyle.OkOnly, "HRIS User Role")
Session("gsRole") = groups
'You can redirect now.
'Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, False))
Response.Redirect("~/Account/_Search.aspx")
End If
Catch ex As Exception
errorLabel.Text = "Error authenticating. " & ex.Message
End Try
OracleConnect 类的代码:
Public Sub Open(ByVal Uname As String, ByVal Pword As String, ByVal SelServ As String)
OraDb = "Data Source=" + SelServ +
";Persist Security Info=True" +
";User Id=" + Uname +
";Password=" + Pword
conn = New OracleConnection(OraDb)
Try
conn.Open()
Catch ex As OracleException
Select Case ex.Number
Case 1
MesgBox("Error attempting to insert duplicate data.", MsgBoxStyle.OkOnly, "HRIS")
Case 12545
MesgBox("The database is unavailable.", MsgBoxStyle.Critical, "HRIS")
Case Else
MesgBox("Database error: " + ex.Message.ToString(), MsgBoxStyle.Critical, "HRIS")
End Select
Catch ex As Exception
MesgBox(ex.Message.ToString(), MsgBoxStyle.Information, "HRIS")
End Try
End Sub
我知道类文件中的 MesgBox,但那些引用了一个 Sub 使用 Javascript,它在程序中工作,它已经过测试并且可以正常工作。
所以我的问题是:
在 IIS 7.0 中有什么东西会触发我还没有找到的这个响应服务器端吗?
如果它在 IIS 中不可行,那么我应该研究其他替代方案吗?
编辑:这个问题的解决方案不在于 ASP 或 VB 代码,而在于服务器上设置的 Oracle。对于将来遇到类似问题的任何人,我建议查看 TNS_ADMIN 环境/系统变量和 TNSNAMES.ORA 文件并确保它们是正确的。如果您进行任何这些更改,请确保重新启动服务器。我的步骤涉及验证 TNSNAMES.ORA 文件是否正确,设置了 TNS_ADMIN 环境变量,然后在 cmd 提示符中使用“set tns_admin={filepath}”,毕竟然后重新启动服务器并且站点运行正常。