Как суперпользователь Вы можете 'хороший' это к самому высокому приоритетному уровню-20 и надеяться, что этого достаточно, чтобы помешать ему выгружаться. Это обычно. Положительные числа понижают приоритет планирования. Обычные пользователи не могут хороший вверх (отрицательные номера)
Mike Hadlow goes into good detail on how to accomplish this:
http://mikehadlow.blogspot.com/2008/11/multi-tenancy-part-1-strategy.html
Обновление: теперь это исправлено в r274 ; вы должны использовать:
[ProtoMember(12, DataFormat = DataFormat.TwosComplement)]
public MyEnum MyValue {get;set;}
В конечном итоге буферы протокола подключаются формат не предоставляет возможности для перечислений [Flags] - он применяет значения перечисления к сдержанный набор. Я мог бы легко допустить это, но:
Более простой способ сделать это может заключаться в использовании прокладки в вашем коде:
public MyEnum MyValue {get;set;}
[ProtoMember(12)]
private int MyValueWire {
get {return (int)MyValue;}
set {MyValue = (MyEnum)value;}
}
Другой альтернативой было бы добавить флаг, который работает, как указано выше, на вашем от имени; обрабатывая его как int, а не как перечисление.
Для этого мы используем абстрактные базовые контроллеры в виде шаблона метода шаблона, который содержит в основном всю необходимую логику контроллера (включая методы действий с их применяемыми фильтрами действий), но затем мы используем абстрактные методы для выполнения конкретных действий, таких как перенаправление на следующая страница в процессе. Это означает, что конкретная реализация контроллера, используемого конкретными потоками страниц приложения, может содержать только один метод, который возвращает RedirectToActionResult, соответствующий следующей странице в потоке. Существует также немало других вещей, которые обрабатывают движение назад и подобные навигационные вещи, но с помощью фильтров действий вы можете настроить его так, чтобы вам не приходилось беспокоиться об этом, когда вы его запустите и начнете работать. .Существуют также объекты базовой модели, которые содержат общие функции, будь то логика проверки или логика сохранения состояния.
Данные, собранные во время процесса приложения, сохраняются в базе данных в виде сериализованных объектов модели xml, которые затем можно извлечь и удалить -сериализуется, когда приложение завершено, и передается в любом формате в любую систему, которую обслуживающий персонал использует для обработки приложений.
Следствием этого является то, что у нас есть структура проекта, состоящая из базовой dll, содержащей аннотацию верхнего уровня классы интерфейсы и служебные классы, а также html-помощники, фильтры действий и т. д. Затем у нас есть проекты mvc, которые содержат конкретные реализации базовых контроллеров, моделей и т. д., а также представления и мастер-страницы.
Самое сложное - это совместное использование представлений, и я не думаю, что мы еще как следует отсортировали это. Хотя с MVC 2.0, содержащим области, я думаю, что это станет меньшей проблемой, но я еще не играл с ней хорошо. (см. сообщение Скотта Гу по версии 2.0: http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx ) Хотя с MVC 2.0, содержащим области, я думаю, что это станет меньшей проблемой, но я еще не играл с ней хорошо. (см. сообщение Скотта Гу по версии 2.0: http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx ) Хотя с MVC 2.0, содержащим области, я думаю, что это станет меньшей проблемой, но я еще не играл с ней хорошо. (см. сообщение Скотта Гу по версии 2.0: http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx ) Одна вещь, которую я использовал POCed, которая выглядит так, как будто она будет работать, - это использование базового проекта MVC для хранения общих представлений, а затем расширение механизма представления по умолчанию для поиска этого проекта на веб-сервере при поиске представления для рендеринга (что довольно легко сделать. ). Однако области - гораздо более приятное решение.
Что касается управления версиями, мы используем svn, и я думаю, вы разумно беспокоитесь о ветвях. Это не то, с чем нам еще приходилось иметь дело, но мы, вероятно, собираемся использовать git, так как он, кажется, делает процесс ветвления и слияния гораздо менее болезненным.
Не уверен, сильно ли это вам помогает, но я бы определенно рекомендовал иметь в виду абстрактные контроллеры и модели, а также посмотреть, как вы можете использовать html-помощники и частичные представления для группировки схожих функций.
Один из способов сделать это - использовать ветвление в системе управления версиями.
Основная ветвь предназначена для общих функций.
Вот что мы делаем, и в настоящее время это работает довольно хорошо примерно для 8 сайтов.
Определите основной проект MVC для ваших контроллеров, моделей представления, HttpApplication, маршрутов и т. Д. Это скомпилируется в DLL и скомпрометирует большую часть вашего сайта.
Создайте базовый набор представлений по умолчанию, скриптов, изображений и т. Д. Для вашего сайта. Они будут серверами по умолчанию для ваших отдельных сайтов.
Для каждого клиента создайте любые настраиваемые контроллеры, маршруты и т. Д., Которые вам понадобятся в проекте, который компилируется в другую dll.
Также для каждого клиента воссоздайте любые представления, сценарии и изображения, которые вы захотите использовать.
Чтобы описанные выше шаги работали вместе, вам понадобится немного клея. Первый кусок клея - это настраиваемый движок просмотра. Вы захотите настроить стандартный механизм просмотра, чтобы сначала искать представления в папке для конкретного клиента, а затем в папке по умолчанию. Это позволяет легко переопределить макет по умолчанию для каждого клиента.
Второй способ заставить все работать - это заставить ваше основное приложение загружать маршруты, контроллеры и т. Д. Из вашей клиентской сборки. Для этого я использую Managed Extensibility Framework (MEF), чтобы предоставить единственный метод Register. Вызов этого метода в моем коде сборки клиента регистрирует маршруты и любые другие потребности клиента.
Вот общий вид того, как выглядит структура папок моего сайта, при этом SiteContent сначала проверяется на наличие представлений:
- AppContent
- AppContent/Static
- AppContent/Static/Images
- AppContent/Static/Scripts
- AppContent/Static/Styles
- AppContent/Views
- AppContent/Views/Shared
- SiteContent
- SiteContent/Static
- SiteContent/Static/Images
- SiteContent/Static/Scripts
- SiteContent/Static/Styles
- SiteContent/Views
- SiteContent/Views/Shared
- web.config
- Global.asax
У меня есть помощники, такие как SiteImage и AppImage, для использования в моих представлениях. Кроме того, я заставляю каждый из моих клиентских сайтов использовать определенные имена для своих главных страниц, которые я никогда не определяю в своих значениях по умолчанию для AppContent.
Я понимаю, что это приблизительный обзор, но сейчас он работает для нас достаточно хорошо.