Какие есть способы поддержки нескольких сайтов с единой кодовой базой? - PullRequest
0 голосов
/ 31 августа 2009

Я пишу довольно простое веб-приложение ASP.NET MVC: только пара страниц CRUD, несколько папок, в которых клиенты могут просматривать документы, и только 3 или 4 роли. Веб-сайт будет использоваться в сценарии B2B, где у каждого клиента будет свой «собственный» веб-сайт.

На этом этапе только , что изменится на веб-сайте, от клиента к клиенту, - это содержимое (т. Е. Документы и строки данных, которые они увидят). Если это так, как лучше всего управлять ролями всех моих клиентов? Я ищу самое простое из возможных решений, потому что это подтверждение концепции, и я не хочу тратить много времени прямо сейчас.

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

Буду признателен за любую помощь ... Я просто не хочу стрелять себе в ногу; Я уверен, что кто-то делал это раньше.

Ответы [ 2 ]

1 голос
/ 31 августа 2009

Я создаю виртуальные каталоги в IIS для каждого клиента, все они указывают на ту же папку, где находится мой код ASP.NET.

Это позволяет мне поддерживать несколько десятков почти идентичных "веб-сайтов", каждый из которых имеет собственную базу данных, которая в основном идентична по форме, отличается только данными.

Итак, URL моего сайта выглядят так:

 http://mysite.com/clientacme/
 http://mysite.com/clientbill/
 http://mysite.com/clientcharlie/

Для этого я разработал две ключевые детали реализации:

  1. Я использую имя папки Virtual Directory, чтобы определить, из какого DSN мой код читает. Это достигается созданием простого статического метода, который внедряет имя папки в шаблон строки DSN. Если вы хотите использовать такую ​​же базу данных для хранения всех данных, вы можете использовать имя папки в качестве фильтра по умолчанию в своих запросах.

  2. Я храню настройки для каждого веб-сайта (верхние и нижние колонтитулы, параметры, ссылки на пользовательские отчеты и т. Д.) В простой таблице «настроек» в каждой базе данных (ключ, значение), а не в Интернете. Конфиг (который является общим). Это позволяет мне расширять базу кода с течением времени для настройки взаимодействия для каждого клиента без разветвления кода.

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

Важно то, что если вы используете разные базы данных SQL Server для содержимого каждого клиента, вам необходимо сценарий любых изменений в таблицах базы данных, индексах и т. Д. И применять их ко всем базам данных одновременно. время (после тестирования конечно). Один простой способ сделать это - сохранить лист Excel с таблицей имен баз данных и большой ячейкой «SQL» вверху. Рядом с каждым именем базы данных создайте формулу для «ИСПОЛЬЗОВАТЬ имя базы данных»; а затем соедините код SQL вверху.

0 голосов
/ 31 августа 2009

Я не уверен, что это полностью отвечает на ваш вопрос, но что касается поддержания пользовательских «статических» страниц, я обнаружил, что внедряю систему на клиентском веб-сайте MVC, где клиент может создавать «Страницы» из панели управления администратора и каждая страница имеет коллекцию сущностей PageContent, которые состоят из поля заголовка и содержимого HTML (заполняется с помощью редактора WYISWYG). После создания страницы приложение MVC отображает http://yoursite.com/Page/Page-Url-Specified-By-The-User на эту страницу и отображает там ее содержимое. Очевидно, что страницы являются динамическими, но, насколько клиент может сказать, что он создал совершенно новую пользовательскую страницу практически без усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...