Отладка нескольких базовых проектов ASP.NET в VS 2017 и IIS Express - PullRequest
0 голосов
/ 17 мая 2019

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

У меня есть 2 проекта ASP.NET Core 2.2. Один - это базовый веб-сервер, обслуживающий статические ресурсы, а другой - проект веб-API, обрабатывающий стандартные запросы REST. Довольно стандартные вещи. Просто для справки, мне скоро нужно будет добавить еще один проект API, но сейчас я просто хочу, чтобы этот «простой» случай работал.

В свойствах решения я сказал VS запустить оба проекта.

solution properties

Я также отредактировал файл applicationhost.config, чтобы включить его как виртуальный каталог в IIS Express. Я хочу, чтобы что-нибудь с /api было отправлено в проект контроллера API, а все остальное - в проект пользовательского интерфейса (статический ресурс).

<site name="Par.Web" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\Source\repos\Par.Web\Par.Web.Ui" />
</application>
<application path="/api" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\Source\repos\Par.Web\Par.Web.Api" />
</application>
<bindings>
    <binding protocol="http" bindingInformation="*:57730:localhost" />
</bindings>
</site>

Я также отредактировал файл launchSettings.json каждого проекта, добавив один и тот же URL в iisSettings.

Из проекта пользовательского интерфейса:

"iisSettings": {
  "windowsAuthentication": false,
  "anonymousAuthentication": true,
  "iisExpress": {
    "applicationUrl": "http://localhost:57730/",
    "sslPort": 0
  }

},

А из проекта API:

"iisSettings": {
  "windowsAuthentication": false,
  "anonymousAuthentication": true,
  "iisExpress": {
    "applicationUrl": "http://localhost:57730/api/",
    "sslPort": 0
  }

},

Когда я запускаю решение, я получаю ответы от проекта пользовательского интерфейса, но любые запросы API возвращают ошибку 404. Кажется, что VS не запускает второй проект, потому что я также не вижу ничего в окне вывода из проекта API. Однако IIS Express, кажется, указывает, что все работает.

iis applications

Я видел сообщения о том, что порты между applicationhost и launchSettings должны быть разными, но это не помогло. На самом деле кажется, что IIS Express перепишет информацию о привязке в applicationhost, чтобы включить номер порта из launchSettings, если они не совпадают. Я также попытался сделать виртуальный каталог API дочерним элементом приложения в applicationhost, но это тоже не сработало. Я также предпринял другие отчаянные попытки довести его до что-то , например, запустил проекты вне процесса и создал отдельный сайт в applicationhost, но все, что мне удалось сделать, это усугубить ситуацию.

Как я уже говорил, я видел другие посты об этом, но все, что я нашел, предназначено для более старых версий Visual Studio (или для кода Visual Studio), или проекты не являются .Net Core. Видимо, они имеют значение.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 17 мая 2019

IIS Express на самом деле не предназначен или не предназначен для запуска одного проекта в качестве виртуального приложения для другого: это скорее сценарий расширенного хостинга, переходящий в полноценный IIS.Это не значит, что вы не можете этого достичь, но для этого потребуется много работы и усилий, если вы сможете.

Однако я бы усомнился, почему вы вообще это делаете.Весь смысл наличия отдельных приложений состоит в том, чтобы сделать их независимыми друг от друга.Если вы собираетесь внутренне связать API с веб-приложением, как это, вы можете просто иметь все в одном проекте.Один и тот же проект ASP.NET Core может поддерживать как конечные точки API, так и более традиционные веб-конечные точки (страницы MVC / Razor).

Если вам нужны отдельные проекты, я бы фактически предложил использовать контейнеры с оркестровкой, поскольку этоупростите жизнь в процессе разработки и , чтобы ваши приложения были готовы к расширенным сценариям развертывания "из коробки".В конце концов, вы по-прежнему можете выбрать традиционное развертывание сайта IIS, если это то, что вы выбираете, но вы также можете легко запустить его в облаке или локальном кластере.Все, что вам нужно сделать, это установить Docker для Windows.Контейнерные инструменты в VS на самом деле довольно хороши и позволяют легко приступить к работе, даже если вы новичок в этих концепциях.

...