Основное веб-приложение MVC3 взаимодействует с дочерним веб-приложением MVC3 - PullRequest
7 голосов
/ 08 июля 2011

Просто некоторая справочная информация здесь.В настоящее время я использую виртуальный хостинг с WinHost и имею следующую настройку

Shared IIS
    |______Main Primary MVC3 web app (uses NHibernate & Castle.Windsor for ORM)
           |_______ Child MVC3 web app (not using NHibernate nor Castle.Windsor as it does not need database access)

. На WinHost он позволяет мне установить начальную точку приложения, поэтому я могу иметь

/ <= for primary app
/child <= for the child app

КаждыйПриложение имеет собственный web.config, поэтому оно выглядит как

/web.config
/child/web.config

Что ж, к моему удивлению, кажется, что хотя папка / child установлена ​​в качестве отправной точки приложения, она не выглядитизолированы от родительского основного веб-приложения, потому что при попытке загрузить дочернее приложение я получаю печально известную ошибку

Не удалось загрузить файл или сборку 'Castle.Windsor' или одну из ее зависимостей.Системе не удается найти указанный файл.

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

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

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

Примечание: это не должно быть проблемой маршрутизации по двум причинам: 1. WinHost устанавливает папку / child в качестве начальной точки приложения 2. Под основным веб-приложением,Я уже проигнорировал ребенка внутри RegisterRoutes ()

routes.IgnoreRoute("child");
routes.IgnoreRoute("{folder}/{*pathinfo}", new { folder = "child" });

Ну, после 3 часов работы над этим ям в недоумении.Любые предложения с благодарностью.Дайте мне знать, если вам нужно увидеть какие-либо конфиги.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Проблема заключается в наследовании .config. Но вы можете отключить это, используя элемент <location>:

<location path="." inheritInChildApplications="false"> 
  <system.web>
  ...
  </system.web>
</location>

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

Вот статья с дополнительной информацией: http://www.colincochrane.com/post/2007/11/Disabling-Configuration-Inheritance-For-ASPNET-Child-Applications.aspx

1 голос
/ 09 июля 2011

В итоге я решил эту проблему, изменив дочернее приложение в область под родительским приложением.Затем я отключил начальную точку приложения для папки / child и удалил папку / child с сервера.

Теперь она работает, хотя меня это не очень радует.

...