Как подключить веб-сервис, работающий через IIS Express, к SQL Server

Я пытаюсь запустить свое веб-приложение через код Visual Studio на своем ноутбуке с Windows 10 (http://localhost:3000/) и подключиться к службе, разработанной через asp.net в Visual Studio (http://localhost:44389). / ) на той же машине.

Когда приложение запускается, я получаю эту ошибку:

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений.

Я попытался добавить службу в систему безопасности SQL Server с помощью этой команды на основе этого сообщения:

IIS не может подключиться к LocalDB

 CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
 CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];

Я заменил MyAppPool на название моего проекта (ABC из ABC.dll), но получаю эту ошибку:

Сообщение 15401, уровень 16, состояние 1, строка 4
Пользователь или группа Windows NT «IIS APPPOOL\ABC» не найдена. Проверьте имя еще раз.

Я даже пробовал это, но тоже не удалось:

CREATE LOGIN [IIS APPPOOL\localhost:44389/] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\localhost:44389];

Я уже активировал IIS на своей машине, и так как в частях кода мы использовали набор данных, строка подключения задается так:

 "Data Source=127.0.0.1;Initial Catalog =XXDB ;Integrated Security = True"

Любые советы приветствуются.

Сообщение об ошибке предполагает проблему с подключением, а не с безопасностью. Добавьте строку подключения к базе данных в свой вопрос.

Dan Guzman 30.10.2022 18:15

Можете ли вы четко подтвердить, где вы разместили веб-приложение, IIS или IIS Express? В противном случае то, что вы делали на стороне IIS, не имеет значения. Веб-приложения в IIS Express запускаются под вашей собственной учетной записью, и это отличается от веб-приложений в IIS. Больше можно найти на halfblood.pro/…

Lex Li 30.10.2022 18:38

@LexLi, спасибо за ваш комментарий, поскольку я работаю на своем локальном компьютере, Visual Studio использует IIs Express. Может быть, не было необходимости активировать IIS на машине, верно? Я думал, что его нужно активировать для IIS Express.

albert sh 30.10.2022 19:01

Какой тип SQL Server вы используете? Не все экземпляры поддерживают Data Source=127.0.0.1 (SQL Server Express или LocalDB). Опять же, появление одного и того же сообщения об ошибке не означает, что вы нашли что-то полезное, поскольку ваш случай может сильно отличаться от других.

Lex Li 30.10.2022 19:04

@LexLi, я использую SQL Server Express

albert sh 31.10.2022 03:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
217
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хм, если все работает локально на вашем компьютере для разработки?

просто используйте Visual Studio для подключения к серверу sql. Он будет делать все «танцы» за вас.

Итак, в вашем проекте vs просто используйте настройки, и пусть VS сделает это за вас.

Итак, в вашем проекте перейдите в Project->ProjectName Properties.

А потом настройки

И тогда вы получите этот экран:

Итак, давайте подключимся к базе данных с именем TEST4 (также можно назвать соединение TEST4).

С вышеизложенным вы можете использовать мастера для настройки соединения.

Конечно, вы можете «всегда» подключаться к SQL-серверу на вашем локальном компьютере, используя проверку подлинности Windows, поскольку вы являетесь «суперпользователем» своей собственной машины.

Итак, давайте так:

Итак, сверху мы можем нажать кнопку [...] в настройках и установить соединение.

Я ОЧЕНЬ настоятельно рекомендую вам установить SQL Server Express для этой установки.

Итак, нажмите на это:

И теперь мы можем просто следовать указаниям мастера, чтобы настроить соединение.

В раскрывающемся списке должен появиться ваш локальный экземпляр SQL-сервера.

Как это:

Если ваш локальный сервер НЕ появляется, то

Убедитесь, что вы используете так называемую "браузерную" службу для SQL-сервера (не имеет ничего общего с веб-браузерами!).

Это будет эта услуга:

Кроме того, пока вы это делаете, убедитесь, что tc/ip включен. (обычно этого делать не нужно, но я рекомендую это сделать).

Итак, в конфигурации сети SQL Server вы видите это:

Итак, пока вы ЗНАЕТЕ, что сервер sql работает.

И снова, без вопросов, мы предполагаем, что у вас установлен SQL Management stuido, верно?

(Visual Studio, SQL Server Express и SQL Management Studio бесплатны).

Хорошо, так что вернемся к простому мастеру подключения, который нам нужно просто щелкнуть мышью, чтобы настроить?

Тогда это:

и после выбора базы данных выполните тестовое соединение.

например это:

Таким образом, вам не нужно делать все те шаги, которые вы отмечаете.

IIS будет нормально подключаться к серверу sql, вам просто нужно убедиться, что сервер SQL работает, и есть ZERO ZERO ZERO ZERO, чтобы попробовать все виды настроек разрешений для IIS, когда выше будет достаточно.

И я бы посоветовал вам установить SQL-сервер в смешанном режиме (как аутентификация Windows, так и аутентификация SQL-сервера).

Для тестирования и разработки вы можете просто использовать вышеуказанную аутентификацию Windows, но вы можете добавить пользователя для входа в систему с помощью SSMS и, таким образом, подключиться с помощью созданного вами входа в систему sql.

Но даже на рабочих серверах? Мне НИКОГДА не приходилось возиться с созданием разрешений в IIS, чтобы он мог подключаться к серверу sql. Все, что вам нужно, это действительная строка подключения, и вы должны быть готовы к работе.

Итак, теперь, когда я создал указанное выше соединение?

Тогда в коде я могу использовать его таким образом.

Давайте добавим представление сетки на страницу aspx следующим образом:

        <asp:GridView ID = "GridView1" runat = "server">

        </asp:GridView>

И код позади этого:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid
    End If

End Sub


Sub LoadGrid()

    Dim strSQL As String =
        "SELECT FirstName, LastName, City, Description, HotelName
        FROM tblHotelsA ORDER BY HotelName"

    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            Dim rstData As New DataTable
            rstData.Load(cmdSQL.ExecuteReader)
            GridView1.DataSource = rstData
            GridView1.DataBind()
        End Using
    End Using

End Sub

И теперь мы получаем это:

Итак, убедитесь, что SQL-сервер запущен и работает.

Убедитесь, что вы можете использовать/подключаться из SSMS.

Убедитесь, что вы используете службу браузера sql.

Включите тк/ip.

А затем используйте мастера в VS для подключения и проверки соединения ДО того, как вы начнете программировать.

Вышеупомянутое построение соединения также означает, что у нас есть общесистемное соединение для использования (и никаких запутанных строк соединения в коде).

Еще больше бонусных баллов? Проект->настройки при построении соединения с мастером? Это ТАКЖЕ размещает это соединение внутри веб-конфигурации для вас, еще больше избавляя от хлопот и бедности в мире.

Большое спасибо, Альберт, за ваш подробный ответ, как обычно, вы так точны в ответах, я уже второй раз вижу, как вы отвечаете на мои вопросы и всегда правильно направляли меня. После выполнения описанных выше шагов я получаю сообщение об ошибке CORS: доступ к XMLHttpRequest по адресу «localhost: 44389/api/Users/isValid » из источника « localhost: 3000» заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку управления доступом: на запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Есть ли что-то, что я пропустил, или это новая проблема, которую следует рассмотреть?

albert sh 31.10.2022 03:29

В моем примере была простая страница aspx, и мы убедились, что проект веб-сайта может свободно подключаться к локальному экземпляру экспресс-сервера sql. (это все, что мы сделали выше). Как только это заработает, я предполагаю, что вы создадите/создаете веб-службу на этом сайте, а затем вызовете эту веб-службу (обычно из некоторого JavaScript на веб-странице (код на стороне клиента)). Однако на данный момент мы предполагаем, что вызов веб-службы находится в этом же проекте (и с действительным подключением к серверу sql). Если вы собираетесь запустить ДВА веб-сайта, то это будет значительно сложно использовать против + IIS Express.

Albert D. Kallal 31.10.2022 04:27

Если у вас есть два отдельных сайта (и с двумя разными номерами портов, это так и есть). Итак, теперь проблема заключается в том, что второй сайт также находится на вашем компьютере разработчика? Возможно, вам придется запустить 2 копии vs и убедиться, что другой сайт также работает. (если сайт не работает локально????). Вы не объяснили, как вам удалось (или удается) запускать два сайта одновременно на вашем устройстве разработки?? Как правило, на локальном компьютере для разработки работает только один веб-сайт. Вы можете запустить два сайта, но если это необходимо, я бы начал использовать полную версию IIS, а не экспресс-выпуск IIS.

Albert D. Kallal 31.10.2022 04:30

Спасибо, Альберт. Да, я запускаю их обоих на одной машине. веб-сервис разработан с использованием VS .net, а фронт разработан с использованием VS Code. Я также перешел по этой ссылке, но не помог: davidsekar.com/asp-net/cors-development-in-localhost

albert sh 31.10.2022 04:38

@albertsh для решения проблем CORS в IIS Express, вы можете подписаться на github.com/lextm/iisexpress-cors

Lex Li 31.10.2022 04:47

Хорошо, тогда вы используете IIS или IIS Express? (настройка IIS Express для запуска двух сайтов довольно болезненна. Итак, Ликс Ли предлагает ссылку, но, надеюсь, вы уверены, что материал для подключения к базе данных работает. Итак, теперь вы перешли к части 2 (проблема CORS — я сделал не проверяйте эту идею Когда мне нужен IIS, у меня есть виртуальная машина на моем ящике разработчика, которую я запускаю, и запускаю веб-сайт под полной версией IIS, поскольку IIS Express хотя и привлекателен и полезен во время разработки, это не тот момент, когда вы нужно запустить более одного сайта).

Albert D. Kallal 31.10.2022 04:51

Другие вопросы по теме