Ошибка навигации после подтверждения - PullRequest
1 голос
/ 23 сентября 2019

Веб-страница для отправки запросов загружается в элемент управления WebBrowser на форме в VB.Net настольном приложении.


После нажатия кнопки Submit запрос сохраняется, но больше невозможно перемещаться по форме.


Ошибка:

Невозможно сериализовать состояние сеанса.В режимах «StateServer» и «SQLServer» ASP.NET сериализует объекты состояния сеанса, и в результате несериализуемые объекты или объекты MarshalByRef не допускаются.То же ограничение применяется, если аналогичная сериализация выполняется в хранилище состояний настраиваемого сеанса в режиме «Пользовательский».

Я настроил службу запросов для запуска на моем локальном компьютере и установил точку останова в началеподпрограмма сохранения.

Я также поставил точки останова в следующих событиях:

WebBrowser1_Navigating
    WebBrowser1_Navigated
    WebBrowser1_DocumentCompleted

Я запустил приложение и определил, где происходит исключение.

Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

    If Not WebBrowser1.IsBusy AndAlso WebBrowser1.ReadyState = WebBrowserReadyState.Complete AndAlso WebBrowser1.AllowNavigation Then

        Dim errStr As String = String.Empty

        If Not WebBrowser1.Document Is Nothing Then

            If WebBrowser1.Document.Title = "404 - File or directory not found." Then

                GoHome(False)

                If StatusStrip1.Visible AndAlso Not WebBrowser1 Is Nothing AndAlso Not WebBrowser1.Url Is Nothing Then
                    ToolStripStatusLabel1.Text = String.Format("Requests - File or directory not found. ({0})", WebBrowser1.Url)
                End If

            ElseIf Me.WebBrowser1.Document.Title = "This page can’t be displayed" Then

                Me.HasError = True

            ElseIf StockObjects.Common.SPDebugEnabled Then

                ToolStripStatusLabel1.Text = Me.WebBrowser1.Url.PathAndQuery
                'ToolStripStatusLabel2.Text = Me.WebBrowser1.Url.Query.ToString
                StatusStrip1.Refresh()

            End If

            If mIsFirstTime Then
                Me.WebBrowser1.Refresh(WebBrowserRefreshOption.Completely)
                mIsFirstTime = False
            End If

        End If

    End If

End Sub

Private Sub WebBrowser1_Navigated(sender As Object, e As WebBrowserNavigatedEventArgs) Handles WebBrowser1.Navigated

    If Not Me.mIsRefresh Then
        Me.WebBrowser1.Refresh(WebBrowserRefreshOption.IfExpired)
        Me.mIsRefresh = True
        If Me.WebBrowser1.Document.Title = "404 - File or directory not found." Then
            Me.HasError = True
        ElseIf Me.WebBrowser1.Document.Title = "This page can’t be displayed" OrElse Me.WebBrowser1.Url.LocalPath = "/navcancl.htm" Then
            Me.HasError = True
        End If
        If StockObjects.Common.SPDebugEnabled Then
            ToolStripStatusLabel1.Text = Me.WebBrowser1.Url.PathAndQuery
            StatusStrip1.Refresh()
        End If
    End If

End Sub

Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating

    Debug.Print("WebBrowser1.AllowNavigation = " & WebBrowser1.AllowNavigation)
    Debug.Print("e.Url.Query = " & e.Url.Query)
    Debug.Print("Me.mLastLocation = " & Me.mLastLocation.ToString)
    Debug.Print("e.Cancel = " & e.Cancel)

    If Not HostUri Is Nothing AndAlso e.Url.Host = Me.HostUri.Host Then

        If WebBrowser1.AllowNavigation Then

            If e.Url.Query.Trim.Length > 0 Then
                Me.mLastLocation = e.Url
            Else
                Me.mLastLocation = New Uri(String.Format("{0}{1}", e.Url, Me.HostUri.Query))
                'e.Cancel = True
                'WebBrowser1.Navigate(New Uri(String.Format("{0}{1}", e.Url, Me.HostUri.Query)))
            End If

        Else

            e.Cancel = True

        End If

    Else

        If Not WebBrowser1.AllowNavigation Then
            e.Cancel = True
        End If

    End If

    If StatusStrip1.Visible Then
        ToolStripStatusLabel2.Text = Me.mLastLocation.ToString
        ToolStripStatusLabel1.Text = e.Url.PathAndQuery.ToString
        StatusStrip1.Refresh()
    End If

End Sub

ВКод для формы приложения для настольного компьютера, события WebBrowser запускаются следующим образом:

Первая загрузка запроса на создание

WebBrowser1_Navigating
WebBrowser1_Navigated
WebBrowser1_DocumentCompleted

Перезагрузка запроса на создание (раскрывающийся список для настройки конфиденциальности запускает PostBack)

WebBrowser1_Navigating
WebBrowser1_Navigated
WebBrowser1_DocumentCompleted

Отправить запрос на создание

WebBrowser1_Navigating

Навигация в другом месте

WebBrowser1_Navigating

Сообщения об ошибках не отображаются.Я проверил значения всех переменных в событии WebBrowser1_Navigating, и единственное изменение - это Me.mLastLocation.

При переходе через код для формы Request_Add.aspx событие save обрабатывает запрос без исключения.Ошибка возникает в разметке.Линия, в которой это происходит, менялась во время тестирования, но всегда была встроенным кодом.Мне удалось переработать страницу, чтобы исключить все, кроме одной строки встроенного кода, и там каждый раз происходит сбой.Но только после отправки и сохранения записи.

Строка, в которой происходит сбой:

    <%: Scripts.Render("~/bundles/modernizr") %>

Эта строка находится внутри PlaceHolder на странице Request.Master.aspx.разметка, как и на другой главной странице.

Буду признателен за любые предложения.Спасибо.

...