Неожиданное и разное поведение ASP.NET в разных средах - PullRequest
0 голосов
/ 17 апреля 2009

У меня есть сайт ASP.NET (VB.NET), который я пытаюсь очистить. Когда он был изначально создан, он был написан без обработки ошибок, и я пытаюсь добавить его, чтобы улучшить взаимодействие с пользователем.

Try
    If Not String.IsNullOrEmpty(strMfgName) And Not String.IsNullOrEmpty(strSortType) Then
        If Integer.TryParse(Request.QueryString("CategoryID"), i) And String.IsNullOrEmpty(Request.QueryString("CategoryID")) 
            MyDataGrid.DataSource = ProductCategoryDB.GetMfgItems(strMfgName, strSortType, i)
        Else
            MyDataGrid.DataSource = ProductCategoryDB.GetMfgItems(strMfgName, strSortType)
        End If
        MyDataGrid.DataBind()

        If CType(MyDataGrid.DataSource, DataSet).Tables("Data").Rows.Count > 0 Then
            lblCatName.Text = CType(MyDataGrid.DataSource, DataSet).Tables("Data").Rows(0).Item("mfgName")
        End If

        If MyDataGrid.Items.Count < 2 Then
            cboSortTypes.Visible = False
            table_search.Visible = False
        End If
        If MyDataGrid.PageCount < 2 Then
            MyDataGrid.PagerStyle.Visible = False
        End If
    Else
        lblCatName.Text &= "<br /><span style=""fontf-size: 12px;"">There are no items for this manufacturer</span>"
        MyDataGrid.Visible = False
        table_search.Visible = False
    End If
Catch
    lblCatName.Text &= "<br /><span style=""font-size: 12px;"">There are no items for this manufacturer</span>"
    MyDataGrid.Visible = False
    table_search.Visible = False
End Try

Теперь мы пытаемся избежать генерации ошибки 500, перехватывая исключения. В строке запроса может быть три элемента, но здесь важны только два. В моей тестовой среде и в Visual Studio, когда я запускаю этот сайт, не имеет значения, находится ли этот элемент в строке запроса. В производстве это имеет значение. Если этот третий элемент отсутствует (SubCategoryID) в строке запроса, вместо данных из базы данных отображается «Нет элементов для этого производителя».

В двух разных средах я вижу два разных пути выполнения кода, несмотря на одинаковые URL-адреса и одинаковую базу кода.

Сайт работает на Server 2003 с IIS 6.

Мысли

EDIT: В ответ на приведенный ниже ответ я сомневаюсь, что это ошибка соединения (хотя я вижу, к чему вы клоните), поскольку, когда я добавляю SubCategoryID в строку запроса, сайт работает правильно (отображая данные из базы данных). *

Также, пожалуйста, дайте мне знать, если у вас есть какие-либо предложения по тестированию этого сценария, без развертывания кода обратно в производство (он был отменен).

Ответы [ 3 ]

3 голосов
/ 17 апреля 2009

Я думаю, вы должны попытаться распечатать информацию об исключении в блоке catch, чтобы увидеть, в чем проблема. Это может быть что угодно, например ошибка подключения к вашей базе данных.

0 голосов
/ 22 апреля 2009

Я обнаружил причину вчера. Короче говоря, это было потому, что когда я копировал свои файлы со своего компьютера в среду разработки, я пропускал файл, который по иронии судьбы заставил его работать, а не нет. Таким образом, в конечном итоге он функционировал бы одинаково в обеих средах.

0 голосов
/ 17 апреля 2009

Ошибка может быть чем угодно, и вам определенно следует рассмотреть возможность распечатать это или зарегистрировать где-нибудь, а не предполагать, что данных нет. Вы также выводите одно и то же сообщение об ошибке в пользовательский интерфейс для двух разных путей кода, что усложняет отладку, особенно не зная, произошло ли исключение, и если да, то, что это было.

Как правило, в таких случаях лучше не использовать ловушку для всех исключений, особенно без регистрации ошибки. Вместо этого вы должны перехватывать определенные исключения и обрабатывать их соответствующим образом, и любые реальные исключения могут передаваться по стеку, в идеале - глобальному обработчику ошибок, который может регистрировать его и / или отправлять какие-то уведомления об ошибках.

...