Как встроить веб-сайт ASP.NET (или веб-приложение) в другой?

У меня очень мало опыта работы с ASP.NET, и я занимаюсь самообучением, прежде чем начну писать свой первый веб-сайт / приложение, которое будет утилитой калибровки. Как эта утилита работает, сейчас меня не касается. Однако в конечном итоге утилита должна быть встроена в чужой веб-сайт, либо просто как URL-адрес страницы с моим кодом, либо встроенной (скажем, в виде фрейма HTML или фрейма iframe). Чтобы понять основы этого, я написал два очень простых веб-сайта ASP.NET: "родитель", который содержит набор фреймов, и "дочерний элемент", который я пытаюсь вставить в один из фреймов.

HTML-код родителя "Default.aspx" в основном таков:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Parent Site Test 1</title>
</head>

<frameset cols="300,*">
    <frame name="outer" src="parent.aspx" noresize></frame>
    <frame name="inner" src="[what do I put here?]"</frame>
</frameset>

</html>

Страница "parent.aspx" содержит только самый основной HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        I am the parent web form.
    </div>
    </form>
</body>
</html>

Дочерний веб-сайт (как у меня сейчас) живет в отдельном решении VS2008 для целей этого упражнения, потому что я пытаюсь воспроизвести условия, при которых чужой веб-сайт должен ссылаться на мою калибровочную веб-страницу / сайт / вещь, Первоначально я думал, что будет какой-то способ упаковать весь дочерний объект в одну DLL, а затем будет какой-то способ сказать родителю использовать эту DLL в качестве источника для дочернего фрейма. Это вытекает из моего опыта в мире Java - с использованием JBoss и J2EE это будет легко решено, потому что дочерний элемент будет просто развернут как другой файл EAR.

Будучи совершенно неопытным по отношению к VS2008 и ASP.NET, в последние несколько дней я провел несколько часов в Google, пытаясь найти ответ, но безрезультатно.

  • Это то, что я пытаюсь сделать разумным; это правильный способ думать о решении проблемы?

  • Могу ли я развернуть ребенка в качестве довольно независимого и автономного веб-сайта (или веб-приложения... Мне все еще неясно, в чем разница), каким-то образом упаковав его в одну DLL? Если да, то как мне на самом деле создать эту DLL-библиотеку из моего веб-сайта / приложения в VS2008 и как мне затем ссылаться на нее на родительском веб-сайте?

  • Если я совершенно не в курсе, как я могу создать эту комбинацию родитель / потомок другим способом? Ребенок (на самом деле утилита калибровки, которую я в конце концов напишу) должен быть в ASP.NET (с C#), но я не имею никакого контроля над родительским сайтом, так как это чужой код, и они просто хотят быть возможность зайти в мою утилиту.

Спасибо за помощь! Чем конкретнее вы можете быть, тем лучше. Я очень новичок в ASP.NET и Visual Studio, хотя у меня есть большой опыт программирования на других языках и IDE.

3 ответа

Решение

Если вы знаете, что клиент также использует ASP.Net, вы можете создать его как пользовательский элемент управления.

Если у вас есть IIS6 или выше, вы можете запустить оба веб-приложения, а в свой src="[что идет сюда]" вы поместите локальный URL-адрес дочернего веб-сайта (возможно, http://localhost/ChildTestWebsite/child.aspx)., Затем при загрузке http://localhost/ParentTestWebsite/Default.aspx вы должны увидеть кадры.

Чтобы упаковать его в одну DLL, я считаю, что вы должны сделать его просто пользовательским элементом управления, как сказал Джоэл, в противном случае у вас есть страницы DLL + aspx.

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

Если родительский объект не собирается обращаться к каким-либо серверным функциям дочернего элемента, вы можете просто сослаться на абсолютный http-путь в src тега frame. В некоторых браузерах могут возникнуть проблемы с безопасностью, если вы попытаетесь получить доступ к методам javascript, а 2 приложения находятся на разных веб-серверах, но это не относится к.NET.

Если родитель собирается получить доступ к функциональности на стороне сервера, вам нужно предоставить компоненты на стороне сервера где-нибудь в родительском проекте. Это сложнее. Я думаю, что вы должны построить все дочерние страницы как веб-элементы управления, которые включены в родительскую страницу aspx.

1: Создайте дочерний проект как библиотеку веб-управления серверными элементами управления, которая может использоваться родительским. Это лучший подход к развертыванию. Все встроено в одну DLL. Самым большим недостатком этого является то, что серверные элементы управления могут быть разработаны только в коде. У вас нет визуального дизайнера, чтобы помочь вам.

2. Создайте проект веб-приложения. В VS2008 вы делаете это с помощью "New Project", а затем находите шаблон "ASP.NET Web Application". Это означает веб-проект, в котором весь код (все, что находится внутри файлов CS) встроен в одну DLL. В этом сценарии вы создаете пользовательские элементы управления (файлы ascx), которые могут использоваться родительской страницей. Недостатком этого является то, что пользовательские элементы управления должны быть заблокированы в веб-приложении runnin, поэтому вы должны скопировать все файлы ascx в развернутое местоположение родительского веб-сайта. DLL также должен быть скопирован в папку bin на родительском веб-сайте. Здесь у вас есть преимущество в том, что гораздо проще проектировать графический интерфейс в VisualStudio. Разработка графического интерфейса и кода для пользовательских элементов управления ascx очень похожа на создание полноценных веб-страниц aspx.

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