С# .aspx javascript .ajax текстовое поле автозаполнения возвращает ошибку 500 при запуске из IIS 8

Что ж, после недели попыток решить эту проблему почти всем, что я мог найти здесь и в других местах, я, наконец, поднимаю флаг капитуляции и открываю это для своих более опытных товарищей. По сути, у меня есть простое приложение для интрасети, которое находится на сервере VMed Windows 2012 R2/IIS8, на котором также размещен SQL 2014 (знаю, знаю). Я пытаюсь выполнить автозаполнение двух текстовых полей из таблицы SQL. В VS2017 он работает отлично, но когда я пытаюсь запустить его из IIS8, я получаю сообщение «Не удалось загрузить ресурс: сервер ответил со статусом 500 (внутренняя ошибка сервера)». Вот HTML:

<script type="text/javascript">
                    $(function () {
                        $("#<%=txtSAPLoc.ClientID%>").autocomplete({
                            source: function (request, response) {
                                var param = { locName: $('#<%=txtSAPLoc.ClientID%>').val() };
                                $.ajax({
                                    method: "POST",
                                    url: "CdtCreateRecord.aspx/GetLoc",
                                    data: JSON.stringify(param),
                                    dataType: "json",
                                    contentType: "application/json; charset=utf-8",
                                    dataFilter: function (data) { return data; },
                                    success: function (data) {
                                        response($.map(data.d, function (item) {
                                            return {
                                                value: item
                                            }
                                        }))
                                    },
                                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                                        alert(errorThrown);
                                    }
                                });
                            },
                            minLength: 2
                        });

                    });

                    $(function () {
                        $("#<%=txtSAPInst.ClientID%>").autocomplete({
                            source: function (request, response) {
                                var param = { instName: $('#<%=txtSAPInst.ClientID%>').val() };
                                $.ajax({
                                    method: "POST",
                                    url: "CdtCreateRecord.aspx/GetInst",
                                    data: JSON.stringify(param),
                                    dataType: "json",
                                    contentType: "application/json; charset=utf-8",
                                    dataFilter: function (data) { return data; },
                                    success: function (data) {
                                        response($.map(data.d, function (item) {
                                            return {
                                                value: item
                                            }
                                        }))
                                    },
                                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                                        alert(errorThrown);
                                    }
                                });
                            },
                            minLength: 2
                        });

                    });
</script>

И соответствующий код позади:

        [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public static List<string> GetLoc(string locName)
    {
        List<string> Loc = new List<string>();
        string query = string.Format("SELECT DISTINCT loc FROM Locations WHERE loc LIKE '%{0}%'", locName);

        using (SqlConnection con = new SqlConnection("Server=usmac2dgsyntax;Database=LREC_ADB;Trusted_Connection=Yes;"))
        {
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Loc.Add(reader.GetString(0));
                }
            }
        }
        return Loc;
    }

    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public static List<string> GetInst(string instName)
    {
        List<string> Inst = new List<string>();
        string query = string.Format("SELECT DISTINCT inst FROM Institutions WHERE inst LIKE '%{0}%'", instName);

        using (SqlConnection con = new SqlConnection("Server=usmac2dgsyntax;Database=LREC_ADB;Trusted_Connection=Yes;"))
        {
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Inst.Add(reader.GetString(0));
                }
            }
        }
        return Inst;
    }

Это выборка статей о stackoverflow, с которыми я ранее консультировался:


person Jamie Piscitelli    schedule 03.05.2018    source источник
comment
Не можете ли вы поместить точку отладки в свой С# и пройтись, чтобы увидеть, где происходит внутренняя ошибка?   -  person Pete    schedule 03.05.2018
comment
Дали ли вы пользователю соответствующие разрешения в IIS?   -  person bilpor    schedule 03.05.2018
comment
это не проблема IIS   -  person aas    schedule 03.05.2018
comment
вы пробовали после удаления contentType: application/json; кодировка = utf-8 часть?   -  person aas    schedule 03.05.2018
comment
@Pete Извините за то, что показался таким тусклым, но как поместить точку отладки в производственную dll? Я честно никогда этого не делал. Это отлично работает в VS, но не в развернутой версии IIS.   -  person Jamie Piscitelli    schedule 03.05.2018
comment
docs.microsoft.com/en-gb/visualstudio/debugger/remote- отладка или проверьте журналы ошибок сервера - там должны быть подробности об исключении   -  person Pete    schedule 03.05.2018
comment
@bilpor Разрешения установлены правильно, и пока только я пытаюсь это сделать, так что ... Если это проблема IIS, я просто ее не вижу.   -  person Jamie Piscitelli    schedule 03.05.2018
comment
@aas Только что попробовал. Теперь вместо ошибки 500 возвращает SyntaxError: Unexpected token ‹ в JSON на позиции 4   -  person Jamie Piscitelli    schedule 03.05.2018
comment
@Pete Большое спасибо за информацию! Журналы ошибок IIS отмечают внутреннюю ошибку 500, но не более того. 500.00 64 и т.д.   -  person Jamie Piscitelli    schedule 03.05.2018
comment
@ Пит ... Еще раз спасибо за информацию. При удаленной отладке живого сайта я понял, что ошибка 500 связана с ошибкой аутентификации SQL. Я забыл предоставить NT AUTHORITY/NETWORK SERVICE права чтения/записи данных для соответствующей БД. Задача решена. Живи и учись. Спасибо всем за вклад.   -  person Jamie Piscitelli    schedule 07.05.2018


Ответы (1)


В конце концов, решение моей проблемы было до безумия простым: после настройки удаленной отладки я обнаружил, что ошибка аутентификации SQL, в свою очередь, вызывала внутреннюю ошибку сервера 500. В SQL я предполагал, что учетная запись NT AUTHORITY\NETWORK SERVICE имеет правильные разрешения на чтение/запись данных в соответствующей БД, но они никогда не назначались, следовательно, ошибка аутентификации и внутренняя ошибка сервера в производстве. Я исправил это, и теперь все работает. Спасибо за советы.

person Jamie Piscitelli    schedule 07.05.2018