Как встроить веб-сайт ASP.NET (или веб-приложение) в другой? - PullRequest
2 голосов
/ 16 июля 2009

У меня очень мало опыта работы с 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, хотя у меня достаточно опыта программирования на других языках и в средах разработки.

Ответы [ 3 ]

1 голос
/ 16 июля 2009

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

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

1 голос
/ 17 июля 2009

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

Если родительский объект не собирается получать доступ к каким-либо серверным функциям дочернего элемента, вы можете просто сослаться на абсолютный 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.

1 голос
/ 16 июля 2009

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

...