2016-03-16 2 views
1

У нас есть приложение ASP.NET Core 1.0 RC1, работающее с dnx-clr-win-x86.1.0.0-rc1-update1 и размещенное в IIS как отдельное Веб-сайт. Это хорошо работает.Приложение ASP.NET 4.5 внутри основного приложения ASP.NET в IIS

Теперь мы хотим добавить «дочернее» приложение в это веб-приложение, поэтому оба они работают на одном и том же порту, но дочернее приложение должно быть доступно в подпункте /Child. Детское приложение является обычным API-интерфейсом ASP.NET 4.5 Web API.

Эта настройка отлично работала перед ASP.NET 5, когда основным приложением было также приложение ASP.NET 4.5. Но, к сожалению, не удается с ASP.NET 5. Когда мы пытаемся получить доступ к приложению ребенка в браузере, мы получим:

HTTP Error 502.3 - Bad Gateway 
There was a connection error while trying to route the request. 

Module   httpPlatformHandler 
Notification ExecuteRequestHandler 
Handler   httpplatformhandler 
Error Code  0x80070002 

Имеет это делать с новым способом хостинг ASP.NET 5 приложений с помощью httpPlatformHandler? Как сказано: он хорошо работает для основного приложения ASP.NET 5, а не для дочернего приложения ASP.NET 4.5. Установлен HttpPlatformHandler 1.2.

+0

Было бы проще разместить ASP.NET 4.5 на том же уровне, а затем использовать URL Rewrite, чтобы отобразить его в нужном месте. Я думаю, что следует избегать вопроса «бок о бок». –

ответ

0

Да, httpPlatformHandler меняет это поведение.

Я думаю, вам нужно разветвить HTTP-запрос с помощью метода расширения "Map" на IApplicationBuilder. Так, например, этот кусок кода в методе «Настройка» класса «Автозагрузка»:

  app.MapWhen(context => 
     { 
      return context.Request.Query.ContainsKey("branch"); 
     }, HandleBranch); 

И HandleBranch может выглядеть так:

 private void HandleBranch(IApplicationBuilder app) 
    { 
     app.Run(async (context) => 
     { 
      await context.Response.WriteAsync("Branch used."); 
     }); 
    } 

Это затем обрабатывает все querystrings со словом " ветви ". Вы можете поймать подпуть "/ Ребенок".

+0

Спасибо, это шаг в правильном направлении. Я могу написать 'app.Map ("/Child ", appl => ...);' и выполняет делегат. Но я до сих пор не вижу способа брокера запроса к дочернему приложению. – Matthias

+0

Не был бы context.Response.Redirect ("yourpathhere") работать? –

+0

Я попробовал. Но тогда я не могу запустить приложение ASP.NET 4.5 в качестве дочернего приложения, но вам нужен отдельный веб-сайт на отдельном порту. Тогда мне также не нужен путь/Child, потому что я мог бы использовать отдельный URL напрямую. Я думал, что есть прямой способ заставить дочерние приложения IIS работать по-прежнему, но это, похоже, не так. – Matthias

Смежные вопросы