Тарифный план мастер от мажордомо. Приятные бонусы от хостинг-провайдера Majordomo

Работа с XML в.NET

Информатика, кибернетика и программирование

Лекция 8. Работа с XML в.NET План 1. Классы для работы с XML .NET 2. Чтение и запись потоков данных Xml 2.1. Использование класса XmlReader 2.2. Методы чтения данных 2.3. Контроль типов данных при чтении Xmlдокумента 3. Создание XMLдокумента в Visual Studio 1. Классы для работы с XML .NET Мно

Украинкский

Лекция 8. Работа с XML в.NET

План

1. Классы для работы с XML . NET

2.1. Использование класса XmlReader

2.2. Методы чтения данных

Xml -документа

1. Классы для работы с XML . NET

Многие составляющие технологии.NET неразрывно связаны с XML. А значит, XML хорошо поддерживается со стороны Framework Class Library. В.NET поддерживаются следующие технологии:

  1. XML 1.0
  2. пространства имен XML
  3. XSD схемы
  4. выражения XPath
  5. XSL преобразования
  6. DOM Level 1 Core, DOM Level 2 Core

Среда. NET Framework не только позволяет применять XML в создаваемых приложениях, но и сама применяет его в конфигурационных файлах, документации по исходному коду и в манифесте сборки.

Пример 1. Манифест сборки

Классы для работы с XML собраны в пространстве имен System . Xml . Это пространство загружается вместе с классами, которые могут использоваться для обработки данных XML .

Таблица 1. Основные классы чтения и записи данных XML

XmlReader

Абстрактный класс, выполняющий чтение и обеспечивающий быструю доставку некешированных данных XML . Класс представляет собой однонаправленный синтаксический анализатор

XmlWriter

Абстрактный класс, выполняющий запись данных в виде потока или файла

XmlTextReader

Расширяет возможности класса XmlReader . Обеспечивает однонаправленный потоковый доступ к данным XML

XmlTextWtiter

Расширяет возможности класса Xml . Writer XML

Таблица 2. Некоторые классы обработки данных XML

XmlNode

Абстрактный класс, представляющий один узел в XML -документе. Базовый класс для некоторых других классов

XmlDocument

Расширяет класс XmlNode . Представляет собой реализацию DOM от W 3 C . Обеспечивает древовидное представление XML -документа в памяти с возможностями навигации и редактирования

XmlNavigator

Обеспечивает навигацию по документу

XMLDataDocument

служит мостом между хранилищами данных и реляционными данными, хранящимися в DataSet

2. Чтение и запись потоков данных Xml

Среда. NET Framework поддерживает два способа обработки XML -документов: потоковый ввод-вывод и DOM . Абстрактные классы XmlReader , XmlWriter и порожденные от них классы поддерживают потоковую модель ввода-вывода.

Классы, основанные на XmlReader обеспечивают быстрый однонаправленный курсор , который организует поток данных XML для обработки.

От XmlReader порождены следующие классы:

От XmlWriter порождены следующие классы:

XmlTextWriter

Расширяет возможности класса Xml . Writer . Обеспечивает быструю однонаправленную генерацию потоков XML

XmlQueryOutput

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

Для работы с данными каждый из классов предоставляет необходимые методы.

2.1. Использование класса XmlReader

Пример чтения данных XML из файла. Данные хранятся в файле "book2.xml" и представляют собой описание книжного каталога:

Страны Мира

Книжний Клуб

Харьков

380

$4.00

Секреты работы в Windows

Дэвид Маккормик

Харьков

300

$5.20

Выбор и модернизация компьютера

Михаил Кутузов

Питер - Москва

320

$6.30

3d max

Кэлли Мердок

Киев - Москва

1050

$10.95

Система <span>Программирования </span> Delphi

Волков Андрей

Москва

800

$10.95

Как собрать свой компьютер

Джон Косли

Москва

300

$6.90

dfsdfdfsdf

sdfsdf

фіваваіва

234

$12.8

Создадим форму с двумя кнопками и текстовым редактором (richTextBox1), в который будем размещать прочитанные данные.

При нажатии кнопки ReadXml выполняется чтение и разбор XML -файла и вывод его в текстовый редактор. Обработчик кнопки ReadXML_Click :

private void ReadXML_Click(object sender, EventArgs e)

//чтение файла

RichTextBox1.Clear(); //очистка редактора

XmlReader rdr = XmlReader .Create("book2.xml" );//создание объекта rdr

while (rdr.Read())

if (rdr.NodeType == XmlNodeType .Text)

RichTextBox1.AppendText(rdr.Value + "\r\n" );

Класс XmlReader является абстрактным, т.есть, для таких классов нельзя создавать объекты оператором new . Для того, чтобы его можно было использовать, нужно включить в него статические методы.

В этом обработчике используется статический метод Create , который возвращает объект XmlReader . Дальше в цикле while выполняется чтение каждой строки файла. По мере чтения производится проверка свойства NodeType . Если узел является текстовым, в текстовый редактор добавляется его содержимое.

2.2. Методы чтения данных

Классы для работы с XML предоставляют несколько способов передвижения по XML -документу. Например, метод Read() перемещает на следующий узел. Потом можно проверить, имеет ли этот узел содержимое ( HasValue ()) или атрибуты (YasAttributes ()).

Основные методы анализа документа представлены в таблице ниже.

Read()

читает очередную запись и перемещает на следующий узел

HasValue ()

возвращает true false – противном случае

HasAttributes ()

просматривает элемент на наличие атрибутов. Возвращает true , если элемент имеет содержимое, false – противном случае

ReadStartElement()

проверяет, является ли узел корневым, после чего смещается на следующий узел. Если узел не корневой, возбуждается исключение XmlException.

IsStartElement()

аналогичен методу ReadStartElement()

ReadString()

чтение одной строки из файла, содержащего документ

ReadElementString()

подобен методу ReadString () за исключением того, что ему можно передать имя элемента. Если следующий узел с содержимым не является начальным дескриптором или если параметр Name не совпадает с текущим параметром узла, возбуждается исключение

MoveToContent()

перемещение к содержимому узла

Пример 2. Вывод отдельных элементов XML -документа

Рассмотрим применения метода ReadElementString () и других методов, а также применение файловых потоков (чтения из файла).

Не забыть подключить using System.IO;

Добавим на форму кнопку Read from file . Код обработчика будет следующим:

private void btmReadXml2_Click(object sender, EventArgs e)

//чтение только название книг (элемент "TITLE"

RichTextBox1.Clear();

FileStream fs = new FileStream ("book2.xml" , FileMode .Open);

XmlReader rdr = XmlReader .Create(fs);

while (!rdr.EOF)

//Если попадаем на тип элемента, проверить его и загрузить в окно

RichTextBox1.AppendText(rdr.ReadElementString() + "\r\n" );

else

// в противном случае - переместиться на след.запись

Rdr.Read();

В этом примере в цикле while используется метод MoveToContent() для поиска узла типа XmlNodeType . Element с названием книги rdr.Name == "TITLE" )

if (rdr.MoveToContent() == XmlNodeType .Element && rdr.Name == "TITLE" )

Просмотр выполняется до конца файла (условие цикла

while (!rdr.EOF)

Если типом узла не является элемент или его имя не совпадает с "TITLE " , то вызывается метод Read () для перехода к следующему узлу. Если очередной узел "TITLE " найден, его содержимое добавляется в окно вывода. Таким образом, будут выведены только названия книг.

2.3. Контроль типов данных при чтении Xml -документа

Класс XmlReader также позволяет считывать данные со строгим контролем типов. Для этого используются методы ReadElementContentAs ... ReadElementContentAsDouble (), ReadElementContentAsBoolean () и другие. Далее показано как можно считывать значение в десятичном формате и выполнять вычисления. В примере выбирается значение цены книги, которое увеличивается на 25%.

Создадим еще одну кнопку с надписью New Price , а в ее обработчике напишем код:

private void btnNewPrice_Click(object sender, EventArgs e)

//Обработчик кнопки NewPrice - контроль типов

RichTextBox1.Clear();

XmlReader rdr = XmlReader .Create("book2.xml" );

while (rdr.Read())

if (rdr.NodeType == XmlNodeType .Element)

if (rdr.Name == "PRICE" )

decimal price = rdr.ReadElementContentAsDecimal();

RichTextBox1.AppendText("Curent Price = " + price+ "\r\n" );

Price += price * (decimal )0.25;

RichTextBox1.AppendText("New Price = " + price + "\r\n\r\n" );

else if (rdr.Name== "TITLE" )

RichTextBox1.AppendText(rdr.ReadElementContentAsString()+ "\r\n" );

rdr.Close();

Если это значение не может быть преобразовано к требуемому типу, возбуждается исключение FormatException .

Компилируем и запускаем на выполнение наш проект.

В результате получаем сообщение об ошибке. Причина – текст элемента имеет вид:

< PRICE >$10.95

Исправим все элементы < PRICE > 10.95,

а документ сохраним под именем ("book 3 .xml" );

В результате получим:

3. Создание XML -документа в Visual Studio

Для создания XML -файла в среде Visual Studio нужно в меню File выбрать New -> File . В окне создания выбрать Xml -файл

Откроется Xml -редактор, в котором можно вводить элементы Xml . Редактор автоматически проверяет ошибки и подставляет закрывающие теги. Созданный файл можно сохранить в нужном месте на диске командой SaveXmlFile . xml As ...


А также другие работы, которые могут Вас заинтересовать

25682. Тонкая кишка 57.5 KB
Клетки кишечного эпителия у 4недельного эмбриона не дифференцированы и характеризуются высокой пролиферативной активностью. В это время среди эндокриноцитов преобладают переходные клетки с недифференцированными гранулами выявляются ЕСклетки Gклетки и Sклетки. В плодном периоде преобладают ЕСклетки большинство из которых не сообщается с просветом крипт закрытый тип; в более позднем плодном периоде появляется открытый тип клеток. Крипты содержат камбиальные элементы эпителия и дифференцирующиеся из них клетки.
25683. солевом обмене веществ. 44.5 KB
Кроме того эти ткани принимают участие в водносолевом обмене веществ. Хрящевые ткани входят в состав органов дыхательной системы суставов межпозвоночных дисков и др. В свежей хрящевой ткани содержится около 7080 воды 1015 органических веществ и 47 солей.
25684. Эмбриогенез 239.5 KB
Вместе с тем появляются особенности отличающие развитие человека от развития других представителей позвоночных. Процесс внутриутробного развития зародыша человека продолжается в среднем 280сут 10 лунных месяцев. Эмбриональное развитие человека принято делить на 3 периода: начальный 1я неделя зародышевый 2 8я неделя плодный с 9й недели развития до рождения ребенка.
25685. Эпителиальные ткани. Поверхностные эпителии 36 KB
Питание эпителиоцитов осуществляется диффузно через базальную мембрану со стороны подлежащей соединительной ткани с которой эпителий находится в тесном взаимодействии. В соответствии с формой клеток составляющих однослойный эпителий последние подразделяются на плоские сквамозные кубические и призматические столбчатые. 1Однослойный эпителий может быть однорядным и многорядным. Такой эпителий называют еще изоморфным.
25686. Яички 60 KB
В постнатальном периоде в семенных канальцах гоноциты размножаются а эпителий половых шнуров сохраняется в качестве поддерживающих клеток. Базальный слой внутренний волокнистый слой расположенный между двумя базальными мембранами сперматогенного эпителия и миоидных клеток состоит из сети коллагеновых волокон. Непосредственно к миоидному слою примыкает неклеточный слой образованный базальной мембраной миоидных клеток и коллагеновыми волокнами. За ними расположен слой состоящий из фибробластоподобных клеток прилежащий к базальной...
25687. Яичники 58.5 KB
Около половины овогоний с 3го месяца развития начинает дифференцироваться в овоцит первого порядка период малого роста находящийся в профазе мейоза. К моменту рождения число овогоний прогрессивно уменьшается и составляет около 45 большая часть клеток подвергается атрезии основные клетки представляют собой вступившие в период роста овоциты 1го порядка. 2 стадия период роста протекает в функционирующем яичнике и состоит в превращении овоцита 1го порядка первичного фолликула в овоцит 1го порядка в зрелом фолликуле. 3 стадия...
25688. Мужские половые клетки 40 KB
Скорость их движения у человека 3050мкм с Целенаправленному движению способствуют хемотаксис движение к химическому раздражителю или от него и реотаксис движение против тока жидкости. Мужские половые клетки человека сперматозоиды или спермии длиной 70мкм имеют головку и хвост. В ядре сперматозоида человека содержится 23 хромосомы одна из которых является половой X или У остальные аутосомами.
25689. Понятие о системе крови. Эритроциты 47 KB
Система крови включает в себя кровь органы кроветворения красный костный мозг тимус селезенку лимфатические узлы лимфоидную ткань некроветворных органов. Элементы системы крови имеют общее происхождение из мезенхимы и структурнофункциональные особенности подчиняются общим законам нейрогуморальной регуляции объединены тесным взаимодействием всех звеньев. Так постоянный состав периферической крови поддерживается сбалансированными процессами новообразования гемопоэза и разрушения клеток крови.
25690. МОЧЕВЫДЕЛИТЕЛЬНАЯ СИСТЕМА 41 KB
Длина его канальцев до 50мм а всех нефронов в среднем около 100 км. Остальные 15 нефронов располагаются в почке так что их почечные тельца извитые проксимальные и дистальные отделы лежат в корковом веществе на границе с мозговым веществом. Таким образом корковое и мозговое вещества почек образованы различными отделами трех разновидностей нефронов. Корковое вещество составляют почечные тельца извитые проксимальные и дистальные канальцы всех типов нефронов.

В первой статье в блоге .NET «Работаем с XML » в комментариях народ потребовал статьи LINQ to XML. Что же, попробуем раскрыть принципы работы этой новой технологии от Microsoft.

Создадим базу для ведения каталога аудиозаписей. База будет состоять из треков:

  • Название
  • Исполнитель
  • Альбом
  • Продолжительность
Мы научимся добавлять, редактировать, удалять и делать различные выборки из нашей базы.

Для начала создадим консольное приложение (я пишу свои проекты на C#, но суть в общем-то понятна будет всем) и подключим необходимое пространство имен

Using System.Xml.Linq;

Создание файлов XML

Создадим XML файл нашей базы содержащий несколько тестовых записей уже при помощи LINQ:

//задаем путь к нашему рабочему файлу XML string fileName = "base.xml"; //счетчик для номера композиции int trackId = 1; //Создание вложенными конструкторами. XDocument doc = new XDocument(new XElement("library", new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Rap"), new XAttribute("time", "3:24"), new XElement("name", "Who We Be RMX (feat. 2Pac)"), new XElement("artist", "DMX"), new XElement("album", "")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Rap"), new XAttribute("time", "5:06"), new XElement("name", "Angel (ft. Regina Bell)"), new XElement("artist", "DMX"), new XElement("album", "...And Then There Was X")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Break Beat"), new XAttribute("time", "6:16"), new XElement("name", "Dreaming Your Dreams"), new XElement("artist", "Hybrid"), new XElement("album", "Wide Angle")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Break Beat"), new XAttribute("time", "9:38"), new XElement("name", "Finished Symphony"), new XElement("artist", "Hybrid"), new XElement("album", "Wide Angle")))); //сохраняем наш документ doc.Save(fileName);

Теперь в папке с нашей программой после запуска появится XML файл следующего содержания:
Who We Be RMX (feat. 2Pac) DMX The Dogz Mixtape: Who"s Next?! Angel (ft. Regina Bell) DMX ...And Then There Was X Dreaming Your Dreams Hybrid Wide Angle Finished Symphony Hybrid Wide Angle

Для создания подобного файла средствами XmlDocument кода понадобилось где-то раза в 2 больше. В коде выше мы воспользовались конструктором класса XDocument, который принимает в качестве параметра перечень дочерних элементов, которыми мы изначально хотим инициализировать документ. Используемый конструктор XElement принимает в качестве параметра имя элемента, который мы создаем, а так же перечень инициализирующих элементов. Удобно то, что мы в этих элементах можем задавать как новые XElement, так и XAttribute. Последние отрендретятся в наш файл как атрибуты самостоятельно. Если вам не нравится использоваться такую вложенность конструкторов и вы считаете такой код громоздким, то можно переписать в более традиционный вариант. Код ниже даст на выходе аналогичный XML файл:

XDocument doc = new XDocument(); XElement library = new XElement("library"); doc.Add(library); //создаем элемент "track" XElement track = new XElement("track"); //добавляем необходимые атрибуты track.Add(new XAttribute("id", 1)); track.Add(new XAttribute("genre", "Rap")); track.Add(new XAttribute("time", "3:24")); //создаем элемент "name" XElement name = new XElement("name"); name.Value = "Who We Be RMX (feat. 2Pac)"; track.Add(name); //создаем элемент "artist" XElement artist = new XElement("artist"); artist.Value = "DMX"; track.Add(artist); //Для разнообразия распарсим элемент "album" string albumData = "The Dogz Mixtape: Who"s Next?!"; XElement album = XElement.Parse(albumData); track.Add(album); doc.Root.Add(track); /* *остальные элементы добавляем по аналогии */ //сохраняем наш документ doc.Save(fileName);

Естественно выбирать необходимый способ нужно по ситуации.

Чтение данных из файла

//задаем путь к нашему рабочему файлу XML string fileName = "base.xml"; //читаем данные из файла XDocument doc = XDocument.Load(fileName); //проходим по каждому элементу в найшей library //(этот элемент сразу доступен через свойство doc.Root) foreach (XElement el in doc.Root.Elements()) { //Выводим имя элемента и значение аттрибута id Console.WriteLine("{0} {1}", el.Name, el.Attribute("id").Value); Console.WriteLine(" Attributes:"); //выводим в цикле все аттрибуты, заодно смотрим как они себя преобразуют в строку foreach (XAttribute attr in el.Attributes()) Console.WriteLine(" {0}", attr); Console.WriteLine(" Elements:"); //выводим в цикле названия всех дочерних элементов и их значения foreach (XElement element in el.Elements()) Console.WriteLine(" {0}: {1}", element.Name, element.Value); }

Здесь в коде, думаю, ничего сложного нету и приведены комментарии. После запуска нашей программый в консоли отобразится следующий результат:

Track 1 Attributes: id="1" genre="Rap" time="3:24" Elements: name: Who We Be RMX (feat. 2Pac) artist: DMX album: The Dogz Mixtape: Who"s Next?! track 2 Attributes: id="2" genre="Rap" time="5:06" Elements: name: Angel (ft. Regina Bell) artist: DMX album: ...And Then There Was X track 3 Attributes: id="3" genre="Break Beat" time="6:16" Elements: name: Dreaming Your Dreams artist: Hybrid album: Wide Angle track 4 Attributes: id="4" genre="Break Beat" time="9:38" Elements: name: Finished Symphony artist: Hybrid album: Wide Angle

Изменение данных

Попробуем пройтись по всем узлам library и увеличить аттрибут Id элемента track на 1.
(дальше писать объявление пути к файлу и результат вывода в консоль я приводить не буду, чтобы не перегружать лишней информацией статью, все компилировал, все работает:)) :

//Получаем первый дочерний узел из library XNode node = doc.Root.FirstNode; while (node != null) { //проверяем, что текущий узел - это элемент if (node.NodeType == System.Xml.XmlNodeType.Element) { XElement el = (XElement)node; //получаем значение аттрибута id и преобразуем его в Int32 int id = Int32.Parse(el.Attribute("id").Value); //увеличиваем счетчик на единицу и присваиваем значение обратно id++; el.Attribute("id").Value = id.ToString(); } //переходим к следующему узлу node = node.NextNode; } doc.Save(fileName);

Теперь попробуем это сделать более правильным способом для наших задач:

Foreach (XElement el in doc.Root.Elements("track")) { int id = Int32.Parse(el.Attribute("id").Value); el.SetAttributeValue("id", --id); } doc.Save(fileName);

Как видим – этот способ нам подошел больше.

Добавление новой записи

Добавим новый трек в нашу библиотеку, а заодно вычислим средствами LINQ следующий уникальный Id для трека:

Int maxId = doc.Root.Elements("track").Max(t => Int32.Parse(t.Attribute("id").Value)); XElement track = new XElement("track", new XAttribute("id", ++maxId), new XAttribute("genre", "Break Beat"), new XAttribute("time", "5:35"), new XElement("name", "Higher Than A Skyscraper"), new XElement("artist", "Hybrid"), new XElement("album", "Morning Sci-Fi")); doc.Root.Add(track); doc.Save(fileName);

Вот таким подним запросом ко всем элементам вычисляется максимальное значение аттрибута id у треков. При добавлении полученное максимальное значение инкрементируем. Само же добавление элемента сводится к вызову метода Add. Обратите внимание, что добавляем элементы в Root, так как иначе нарушим структуру XML документа, объявив там 2 корневых элемента. Так же не забывайте сохранять ваш документ на диск, так как до момента сохранения никакие изменения в нашем XDocument не отразятся в XML файле.

Удаление элементов

Попробуем удалить все элементы исполнителя DMX:

IEnumerable tracks = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX").ToList(); foreach (XElement t in tracks) t.Remove();

В этом примере мы вначале выбрали все треки у который дочерний элемент artst удовлетворяет критерии, а потом в цикле удалили эти элементы. Важен вызов в конце выборки ToList(). Этим самым мы фиксируем в отдельном участке памяти все элементы, которые хотим удалить. Если же мы надумаем удалять из набора записей, по которому проходим непосредственно в цикле, мы получим удаление первого элемента и последующий NullReferenceException. Так что важно помнить об этом.
По совету xaoccps удалять можно и более простым способом:
IEnumerable tracks = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX"); tracks.Remove();
В этом случае приводить к списку наш полученный результат вызовом функции ToList() не нужно. Почему этот способ не использовал изначально описал в

Оценка: 5

Нормальный хостинг/VPS, зачем нагонять. Ну, аптайм конечно не айс, над чем следует бы поработать, но всегда на VPS стоит последний софт + цены вовсе небольшие для таких мощностей, так что можно работать вполне. Но, они не абузоустойчивые и это самый больший минус ибо торренты, музыку, софт тут нечего размещать т.к завлят абузами и все... А так, VPS шустрые, места много за такие деньги но думаю такие цены низкие из-за того что они не абузоустойчивые, а так, столько места не для торрентов и пр. вообще не знаю зачем надо и такие мощности... Ну, разве что информационник или статейник накатать на WP и того это имеет смысл:). Так что, обращать стоит внимание если у вас крупные проекты и не нарушают автороское право, а так - не имеет смысла тут платить деньги, лучше найти что-то еще дешевле ибо хостингы не уважаю, всегда VPS беру.

Оценка: 5

При создании своего личного сайта (тематика художник), на который у меня ушло уйма времени, мои страдания не закончились, нужно было сделать так, чтобы не я одна любовалась, а еще и другие смогли посетить мою галерею.
Нужно было место, где будет располагаться сайт, естественно созвучное с моим хобби. Я выбрала площадку Majordomo.ru потому что это один из самых дешевых хостингов по оплате за год. Всего 140 рублей, а ты уже на голову выше своих коллег, у которых нет сайта! Я считаю 140 рублей это вообще не деньги, особенно если на 365 дней поделить на посуточную плату, зато сайт красиво написан в зоне рф без лишних бесплатных разноуровневых адресов, которые в жизнь не запомнишь и поисковик не выдаст.
Договор можно заключить в офисе Екатеринбурга, вежливые консультанты предложили мне использовать парковку домена, но я пока попробую именно как галерею.
Так же у меня есть почта созвучная с именем сайта. Очень довольна! Давно мечтала о своем сайте, сделанным своими руками, и чтобы его увидели люди!

Оценка: 4

Цены у этого провайдера немного завышены, я плачу ежемесячно около 200 рублей за размещение, да и то лишь из-за того, что оплатил годовую подписку, а то вышло бы на порядок больше. Но зато условия нормальные, выделили 10 Гб места, диск ССД, лимита по сайтам или мускульным базам данных нет, а поначалу так вообще дали попробовать 2 недели бесплатно, чтобы понять, что к чему. Тогда все устроило, поэтому оформился, пока не жалею, разве что цена чуть выше, если судить объективно.
Время работы серверов близко к идеальному, сами сайты, размещенные на хостинге, летают. Еще у них удобная панель управления, лимитов на трафик нет, в почте отлично фильтруется спам. Также иногда проводят акции и скидки, я там приобрел домен за 49 рублей, такое еще поискать надо. Но вот расширяться на нем, не меняя тариф, совершенно невыгодно. Там за 100 Мб надо ежемесячно докидывать 30 рублей, так что для совсем уж крупных ресурсов не факт, что подойдет. В общем, ценовая политика единственное их слабое место, а с технологией все нормально.

Оценка: 5

На этот хостинг садился 3 раза. Первый раз решил попробовать, выбрал дешевый тариф, загрузил сайт с посещаемостью 800 человек в день. Работает. Потом хотел расшириться на том же дешевом тарифе, но уперся в ограничения, техподдержка посоветовала сменить тариф.
В итоге остался с одним сайтом на дешевом. Контракт кончился, сайт перенес, но через год вернулся. Взял тариф, который предлагали, к тому времени его расширили, условия понравились.
Перенес 3 сайта примерно с такой же нагрузкой, по деньгам получалась неплохая экономия. После окончания контракта какое-то время унес все на одну площадку, год назад снова взял второй тариф, повесил 4 сайта, общая посещаемость - 3000 хостов в сутки.
Плюсы:
1. Стабильность (иногда сайты пропадают, но ненадолго). Аптайм вполне сносный.
2. Нет глюков и странностей в настройках софта. Переносишь сайт, минимально настраиваешь, и все работает.
3. Нет проблем с поддержкой.
Минусы:
1. Лимиты тарифов виртуального хостинга. Мягко намекают что при постоянной нагрузке надо жить на VPS. Но такая политика почти у всех хостеров.

Хостинг-эксперт (опыт работы 3 года) Основная специализация - составление обзоров хостинг-провайдеров, формирование рейтингов, маркетинговые исследования рынка хостинга. Очень дотошный человек, скрупулезно тестирующий каждый хостинг.

Первое впечатление

Веб-сайт выглядит довольно удобным, хотя, описание планов не полное. К примеру, нету списка доступных ОС для VPS и выделенных серверов. Также отсутствует информация о системе резервного копирования. Более того, у веб-сайта есть только русская версия, английской нет.

Пакеты виртуального хостинга разделены на Базовые и Корпоративные. Они не сильно отличаются между собой, хотя Корпоративные пакеты намного дороже так они должны быть размещены на отдельном сервере. Однако, конфигурация этого сервера не указана, так что сложно судить, насколько Корпоративные пакеты лучше Базовых. Цены Базовых пакетов виртуального хостинга варьируются от 1,79 долл/мес до 5,45 долл/мес, Корпоративных - от 11,93 долл/мес до 14,92 долл/мес. Такие функции, как редирект доменного имени, антивирус и сканер вредоносного ПО, для виртуального хостинга платные. И это базовые функции, которые обычно входят в стоимость пакета.

VPS серверы небольшие и недорогие. Например, самый дорогой сервер имеет следующие конфигурации: 2 ядра процессора, 4 Гб ОЗУ и 60 Гб дискового пространства с жесткими дисками SSD.

Выделенные сервера слабоватые. Процессоры устарелые, а жесткие диски только HDD. Поэтому можно сказать, что цены для этих серверов явно завышены: от 44 долл/мес до 99 долл/мес.

Тестовый период

Компания предоставляет тестовый период в течение 14 дней только для виртуального хостинга. Также можно получить возврат средств за VPS сервер в течение 10 дней после покупки.

Биллинговый цикл

Выделенный сервер можно приобрести на 1, 2, 3, 6 или 12 месяцев. Все остальные виды хостинга можно купить на месяц или год.

Панель управления

Мажордомо предоставляют панель собственной разработки для всех пакетов виртуального хостинга. Она выглядит такой же удобной, как cPanel или Plesk. На VPS или выделенный сервер типа self-managed можно поставить любую панель управления. На VPS сервер типа managed установлена ISPmanager.

Лимиты

У VPS и выделенных серверов стандартные ограничения дискового пространства, количества ядер процессора и объема ОЗУ. У всех Базовых пакетов, кроме Старт, количество доменов и баз данных не ограничено, а дисковое пространство варьируется от 5 Гб до 15 Гб. У Корпоративных пакетов количество доменов ограничено от 1 до 3, а дисковое пространство - от 10 Гб до 15 Гб.

Безопасность

Компания предоставляет защиту от DDoS-атак и спама для всех планов виртуального хостинга. Антивирус и сканер вредоносного ПО платные, 0,73 долл/мес и 1,48 долл/мес за один домен соответственно. Обеспечивать безопасность и производить резервное копирование файлов выделенных и VPS серверов нужно самостоятельно.

ОС

На серверах виртуального хостинга установлена Ubuntu. На VPS сервер без администрирования можно поставить CentOS, Debian или Ubuntu, а на VPS сервер с администрированием - только Debian. На выделенный сервер можно инсталлировать любой дистрибутив Linux.

Поддержка

Компания предоставляет 24/7 поддержку в тикетах. Отвечают по существу и недолго, примерно раза в 2 часа. Также Мажордомо предлагают VPS серверы с администрированием. Они дороже, но команда тех поддержки сможет помочь с любым вопросом или проблемой связанной с управлением и настройкой сервера. База знаний полная, охватывает все необходимые темы.

Вывод

С одной стороны, виртуальный хостинг довольно дешевый, хотя базовые функции платные. Также цены на выделенные серверы завышены, так как оборудование устарелое, а качество не соответствует цене. С другой стороны, VPS хостинг неплохой в целом - и цены, и характеристики. В принципе, можно сказать, что у этой компании стоит попробовать именно VPS хостинг.

В сегодняшнем обзоре речь пойдет о хостинг-провайдере Majordomo . Мы постараемся объективно разобраться в его ключевых особенностях, преимуществах и недостатках. Ведь идеального хостинга не бывает. Или все-таки бывает?

О Majordomo

О виртуальном хостинге от Majordomo

Так как виртуальный хостинг является наиболее востребованной и массовой услугой у любого провайдера – поговорим о нем более подробно. Что нам может предложить Majordomo ?

Стоимость виртуального хостинга от Majordomo варьируется от 99 до 749 рублей в месяц (при оплате за год ).


При этом посмотрев на изображение, приведенное выше, вы быстро поймете, что «безлимитный » виртуальный хостинг доступен только на тарифах «Безлимитный » и «Безлимитный+ », а на самом дешевом тарифе «Старт » некоторые ограничения все-таки присутствуют. Однако для большинства начинающих вебмастеров и пользователей виртуального хостинга они станут вполне допустимыми.

Приятные бонусы от хостинг-провайдера Majordomo

Перед тем как перечислить приятные «плюшки » предоставляемые пользователям хостинг-провайдера Majordomo стоит оговориться, что некоторые из них недоступны на тарифе «Старт ».

Итак, о бонусах:

  • При единовременной оплате трех месяцев обслуживания на тарифных планах «Безлимитный » или «Безлимитный + » любой пользователь Majordomo получает в подарок домен в зоне .ru или .рф (на выбор ).
  • Бесплатная почта для домена от «Mail.ru для бизнеса ».
  • Автоматическая установка таких популярных CMS-систем как WordPress и Joomla (на тарифах «Безлимитный» или «Безлимитный +» ).
  • Бесплатный SSL-сертификат .
  • Предоставление промокода Google AdWords на сумму 2000 рублей (на всех тарифах ).
  • Бесплатный перенос сайта от другого провайдера плюс три месяца хостинга в подарок (не распространяется на тарифный план «Старт» ).
  • Специальные корпоративные тарифные планы «Бизнес » и «Бизнес + ». При стоимости в 599 и 749 рублей в месяц соответственно, они включают в себя приоритетную техническую поддержку, оперативную юридическую консультацию, профессиональную помощь в настройке сайтов и, что самое главное — размещение на отдельных выделенных серверах.


Дополнительные услуги и возможности хостинг-провайдера Majordomo

  • Поддержка полного спектра SSL-сертификатов Comodo и возможность их приобретения.
  • Возможность проведения всестороннего SEO-аудита сайта.
  • Обеспечение защиты сайта от взлома и лечение сайтов от вирусов (в партнерстве с компанией Revisium ).
  • Комплексная услуга «Сайт под наблюдением », включающая в себя своевременное лечение зараженного сайта, его защиту от взлома хакерами и ботами, а также круглосуточный мониторинг веб-угроз и контроль за доступом. Услуга предоставляется в партнерстве с компанией Revisium .
  • Возможность обеспечения дополнительной защиты от спама и почтовых вирусов.
  • Базовая или премиальная настройка контекстной рекламы в Яндекс.Директ и Google AdWords .

Вместо заключения

Подводя итог можно сказать, что если вы ищите хостинг, то Majordomo действительно заслуживает вашего пристального внимания. Обязательно воспользуйтесь 14-дневным периодом бесплатного тестирования, ведь этот хостинг обладает множеством достоинств, а среди недостатков можно отметить лишь некоторые ограничения, присутствующие в тарифном плане «Старт ».



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: