Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

В двадцать пятом выпуске рассылки '.Net Собеседник' вы можете прочесть обзор новых компонент и продуктов,


Информационный Канал Subscribe.Ru

.Net Собеседник #25

Содержание
  1. От автора
  2. Обзор новостей
  3. Статья выпуска - Запускаемся из веб
  4. Время кода - Сворачиваем приложение на C# в системный трей
  5. Форумы .Net на www.sql.ru

От автора

Здравствуйте, коллеги!

Появилось желание прикруть к одному своему веб-приложению графики. Занялся поиском соответствующих компонент в Интернете. Нашлось несколько очень достойных наборов, но у всех у них был один большой минус - они были платные. После достаточно продолжительных поисков был найден бесплатный аналог, похуже, конечно, чем платные, но имеющаяся функциональность меня устроила. Гнездо этого чуда находится здесь - http://www.carlosag.net/ , чудо снабжено толковой документацией и находится в постоянном развитии. Так что рекомендую, тем более, что работать с ним просто (здесь компонент вставляется в страницу во время выполнения):

ChartControl ChartControl1 = new ChartControl();
ChartControl1.Height = 400;
ChartControl1.Width = 1200;
ChartControl1.ChartTitle.Text = "Ваш заголовок";

ChartControl1.XTitle.Text = "Время";
ChartControl1.XTicksInterval = 30;
ChartControl1.XValuesInterval = 30;

ChartControl1.YTitle.Text = "Ток";
//начало для оси Y
ChartControl1.YCustomStart = 0;
//конец шкалы для оси Y
ChartControl1.YCustomEnd = 4;
//шаг по шкале Y
ChartControl1.YValuesInterval = 1.0F;< BR >
//настройки области графика
ChartControl1.ChartPadding = 10;
ChartControl1.BottomChartPadding = 10;
ChartControl1.LeftChartPadding = 10;
ChartControl1.Padding = 10;< BR >
//строим собственно линию графика
LineChart chart = new LineChart();
chart.Fill.Color = Color.FromArgb(50, cLineColor);
chart.Line.Color = cLineColor;
chart.Line.Width = fLineWidth;
chart.Legend = sLegendName;
chart.ShowLineMarkers = false;< BR >
//пробегаем по таблице и добавляем точки
foreach (DataRow Gr in ds.Tables[0].Rows)
{
string stime = "";
if ((Gr[0]!=DBNull.Value)&& (Gr[1]!=DBNull.Value))
{
stime = Gr[0].ToString() + ":" + Gr[1].ToString();
}
else {stime="Null";}
float ffloat = 0F;
if (Gr[sColumnName]!=DBNull.Value)
{
ffloat = (float)Convert.ToDecimal(Gr[sColumnName]);
}
else {ffloat = 0F;}
chart.Data.Add(new ChartPoint(stime, ffloat));

}
//добавляем график
ChartControl1.Charts.Add(chart);
ChartControl1.RedrawChart();
//добавляем компонент на страницу frm
frm.Controls.Add(ChartControl1);

Вот и всё. Желаю приятного чтения.

{К содержанию}

Обзор новостей

  1. Вышел Aspose.Word 1.9
    Aspose.Word – .Net компонент создания отчётов в формате Word, позволяющий вам читать и писать документы Word без использования Microsoft Word. Последний релиз включает метод DocumentBuilder.MoveToSection и т.д.
  2. Вышел набор элементов управления Magic Explorer Controls 1.0.3 для Windows Forms .Net
    Библиотека классов Magic Explorer Controls содержит улучшенный проводник для файлов и дисков для приложений Windows Forms.NET.
  3. Вышел XStandard для Firefox
    XStandard – ведущий плагин, являющийся WYSIWYG-редактором для Windows и браузер-базирующихся систем управления содержимым – теперь поддерживает Firefox. Редактор генерирует чистый код XHTML Strict или 1.1, для форматирования использует только CSS, корректно отделят содержимое от презентации. Версия Lite бесплатна для коммерческого использования. Версия Pro использует веб-сервисы для проверки орфографии, перетаскивания файлов, ссылок на файлы в удалённых библиотеках, общается с системами третьих производителей и импортирует информацию из них.
  4. Диаграммы Nevron для WinForms 3.0
    Nevron LLC объявляет о выходе Nevron Diagram для WinForms 3.0. Компонент характеризуется улучшенными способностями по отображению диаграмм и графиков.
  5. Вышел Aspose.Email 1.0
    Компонент .Net для формирования Email и компонент для отсылки писем по Smtp-протоколу с такими возможностями, как Mail Merge, врезка объектов, мониторинг, запись логов, конфигурирование smtp.
  6. Вышла AVIcode Intercept Studio 2.1
    Intercept предлагает "Графическую цепь событий" для того, чтобы помочь разработчикам идентифицировать компоненты, которым необходима инициализация. Медленные бизнес-транзакции, вовлекающие несколько серверов, представлены на Visio-подобном дисплее. Отображаются приложения, веб-сервисы, .NET Remoting, обращения к SQL, Oracle и т.д.
  7. OfficeWriter V2.5 поддерживает SQL Reporting Services
    SoftArtisans OfficeWriter позволяет выполнять дизайн, публикацию и распространение отчётов прямо из Microsoft Excel и Word, используя ASP.NET, классический ASP или Reporting Services.
  8. Новый .NET сайт
    Адрес - www.developerland.com.
  9. DbNetTime.NET: веб-основанное ПО для отслеживания времени
    DbNetLink выпустила DbNetTime.Net v1.1, новое веб-базированное приложение для записи и отслеживания времени. Посетите веб-сайт для просмотра оналйновой демонстрации и получения бесплатной 5-пользовательской лицензии.
  10. ComponentOne объявила о ComponentOne DevKits для Borland Delphi 2005
    ComponentOne объявила о разаработке ComponentOne DevKit для Borland® Delphi™ 2005. Это предложение объединяет новую среду разработки Borland Delphi 2005 и всю линейку компонент от ComponentOne для .NET, ASP.NET, мобильных устройств и даже COM.

Статья выпуска


Запускаемся из Веб

ЯЗЫК: C#
АВТОР: Bill Wagner
Код к статье : BillW-ZeroDSample.zip

ПЕРЕВОД: Чужа В.Ф ака hDrummer

Вступление

Иногда самый лучший инсталлятор – это полное его отсутствие. Что может быть проще простого копирования вашего приложения на веб-сервер и предоставления возможности пользователям запускать его прямо оттуда? Всё, что нужно сделать для перехода на новую версию приложения – скопировать набор сборок и сопутствующих файлов в виртуальный каталог сайта. Пользователи автоматически переходят на использование последней версии. А не звучит ли это слишком хорошо чтобы быть правдой?

Да, как и всё то, что слишком хорошо звучит для того, чтобы быть правдой, и в нашем случае есть свои «но». В этом случае оно касается безопасности. В этой статье мы рассмотрим те ограничения, которые накладываются политиками .NET, а также каким образом можно с ними работать.
Возможность запуска приложения .NET, размещающегося на веб-сервере – это технология, разработанная в ответ на ограничения других сред, используемых для построения веб-приложений. Ещё хуже то, что работа с веб-приложением создаёт целый диапазон таких навыков у пользователя, которые можно охарактеризовать как раздражающие и даже вредные. Например, я запостил пару недель назад сообщение в блог. Набивая его, я нажал клавишу “backspace” для удаления символа. К несчастью, я задел клавишу мыши и фокус переместился из окна редактирования. Печальный результат: было потеряно две набранных страницы. Подобные проблемы возникают в веб-приложениях ежедневно. Ещё одним преимуществом приложений Windows forms – более богатый выбор компонент по сравнению с веб-приложениями. На чём вы будете писать приложения – на C#,VB.NET, или EcmaScript – это ваш выбор? Короче говоря, браузеры были разработаны для просмотра. Дешевизна разработки и лёгкость распространения сделала веб-приложения широко распространёнными. Эти приложения особенно достойны внимания из-за т.н. «нулевых» усилий при распространении. Однако вы можете заменить веб-интерфейс на загружаемый смарт-клиент для того, чтобы предоставить больше возможностей пользователю.
Такая возможность «лёгкого» инсталлирования работает только для приложений, которые на 100% написаны на управляемом коде. CLR может проверить насколько безопасно управляемое приложение. Если ваше прииложение содержит хотя бы строчку неуправляемого кода, CLR не запустит его.
В качестве примера я написал небольшое приложение WinForms, которое взаимодействует с веб-сервисом. Это простое приложение, выдающее случайную цитату. Также есть поиск цитат. Приложение использует веб-сервис для отыскания цитат. Это приложение такого типа, которые вы пишите каждый день – делаем запрос на сервер и отображаем результаты.
Использование Windows Forms делает более лёгкой разработку приложения по сравнению с использованием веб-форм. Например, я добавил закладки для текущей и предыдущей сессии («историю»). Вторая закладка отображает список всех цитат, которые вы просматривали с помощью этого приложения. Эта история, да и вся информация о сессии клиента, хранится на самом клиенте – необходимости использовать сервер для этого нет. В итоге – ваше приложение предоставляет больше возможностей пользователю, а код на сервере становится проще. Добавьте к этому лёгкость распространения – и вы поймёте, что в вашем арсенале обязательно должна быть такая технология.

Простейший инсталлятор, когда-либо построенный вами.

Построение приложения-клиента выполняется по тем же самым правилам, которые уже опробованы для клиента, использующего веб-сервис. Добавим веб-ссылку и построим приложение – как только это сделано, необходимо поместить ваш exe-шник в виртуальный каталог на веб-сервере. Вот и всё. Всё готово. Конечно, если у вас не будет в дальнейшем никаких обновлений. Давайте теперь обсудим как к этому постепенно подойти. Лично я больше склонен создавать отдельную директорию на сервере для каждой версии приложения. Здесь я создал такой каталог в каталоге веб-сервиса для того, чтобы скачиваемый проект был немного меньше и проще. Как только вы создали каталоги и добавили исполняемый файл, надо создать для пользователей веб-страницу запуска этого приложения:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Random Quote Client Launcher</title>
<meta name="GENERATOR"
content="Microsoft Visual Studio .NET 7.1">
<meta name="ProgId"
content="VisualStudio.HTML">
<meta name="Originator"
content="Microsoft Visual Studio .NET 7.1">
</head>
<body>
<P>This page contains the random quote client.</P>
<P>Click <a href="ClientApplication/1.0.0.0/RandomQuoteClient.exe">
here to run the sample.</P>
</body>
</html>

Страница, конечно, не станет призёром на конкурсе дизайнеров, но делает свою работу исправно. Тэг <a> содержит ссылку на исполняемый файл на сервере. Когда пользователь щёлкает на ссылке, то, при установленном .NET Framework, запускается клиентское приложение. (Также можно создать ярлык у каждого клиента на рабочем столе со ссылкой: http://server/ClientApplication/1.0.0.0/RandcomQuoteClient.exe, другой вопрос – если Framework не установлен – что тогда??? А веб-приложения как раз и не требуют его установки – прим.переводчика.)

Будущие обновления можно поместить в других каталогах сервера (а как же созданные ссылки на рабочих столах?- прим.переводчика ). Обновив ссылку, можно изменить версию, которая используется пользователем). Можно пойти дальше – перемапливать виртуальный каталог на каталог с текущей версией и изменять этот маппинг так, чтобы пользователь всегда работал с последней версией (Неудачная идея. Уж лучше тогда сделать каталог, например, Current, на него ссылку, а в каталог ложить последнюю версию приложения. – Прим.переводчика. ).

О доверии и безопасности

Клиент-цитатник запускается потому, что он написан полностью на управляемом коде, а CLR в состоянии убедиться, что он хорошо себя ведёт. «Хорошо себя ведёт» - значит, что он не воспользуется переполнением буфера, не имеет прямого доступа к памяти и не использует библиотеки или COM-объекты, которые могут выполнить неположенные или непредусмотренные действия. Но это не значит, что он совершенно безопасен. Управляемый код тоже может создавать и удалять файлы, модифицировать реестр, иметь доступ к сетевым ресурсам и делать многие другие, полезные или деструктивные (как любит сейчас говорить Путин – контрпродуктивные, - прим.переводчика) действия. Так что CLR накладывает массу ограничений на скачанное приложение, пытаясь защитить ваш компьютер. У вас ограниченная версия окна открытия файлов: вы не можете сохранить файл, создать папку или удалить что-либо. Можно использовать только «безопасную печать», а не полный механизм печати. Нельзя использовать классы Reflection.Emit. Ваше приложение имеет ограниченный доступ к сети: имеет доступ только к тому сайту, с которого было скачано. И наконец – нет доступа к реестру. Некоторые ограничения накладываются при загрузке сборки из доверенного интранет-сайта. Приложения, загружаемые из того же домена, не имеют статуса «доверяем полностью», но всё же имеют более высокую степень доверия, чем приложения из большого, дикого Интернета. Я всегда нацеливаюсь на минимальные права и стараюсь проверять работоспособность приложения, запуская его откуда-нибудь из Интернета. Такой подход даёт мне возможность чётко настроить ограничения по безопасности в интранет и даёт больше безопасности для моих пользователей. Всё это привело меня к Изолированному Хранилищу.

Изолированное Хранилище – механизм, благодаря которому ваша сборка получает специальный каталог для доступа к данным. Эта изоляция двухсторонняя: ваше приложение может писать в своё хранилище, не смотря на то, откуда к нему (приложению) был получен доступ. Также только ваше приложение имеет доступ к Хранилищу, никакое другое доступа не имеет и изменить там файлы не может. Изолированное хранилище – это частное пространство вашего приложения на диске для хранения данных – но оно не является скрытым или зашифрованным. Не используйте его для хранения паролей или другой подобной информации, если вы не зашифровали её каким-нибудь дополнительным способом.
Я добавил использование перманентной истории доступа к цитатам для того, чтобы дать вам ощутить прелесть доступа к изолированному хранилищу. Когда приложение завершает работу, то все текущие цитаты пишутся в файл “QuoteHistory.txt” в изолированном хранилище:

private void Form1_Closing(
object sender, System.ComponentModel.CancelEventArgs e)
{
// сохраняем текущие цитаты в изолированном хранилище:
IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForDomain( );

IsolatedStorageFileStream historyStream = new IsolatedStorageFileStream ("QuoteHistory.txt", FileMode.Create, iso);

StreamWriter wr = new StreamWriter( historyStream );
foreach( string quote in this.textBoxHistory.Lines) wr.WriteLine(quote);
foreach( string quote in this.textBoxCurrent.Lines) wr.WriteLine(quote);
wr.Close();
}

Этот код достаточно ясен, кроме первых двух строк. Метод IsolatedStorageFile.GetUserStoreForDomain() возвращает объект IsolatedStorageFile, который представляет пространство Isolated Storage для этого приложения и пользователя. В Windows XP хранилище обычно размещается C:\Documents and Settings\\Local Settings\Application Data\Isolated Storage. Конструктор класса IsolatedStorageStream создаёт файл в пространстве этого изолированного хранилища. После этого вся работа с этим фалом производится также, как и с другими обычными файлами.

Если вы сохраняете информацию в изолированном хранилище, то и читать её надо оттуда же:

private void Form1_Load(object sender, System.EventArgs e) {

IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForDomain( );

string[] files = isoStore.GetFileNames("QuoteHistory.txt");
if ( files.Length > 0 )
{
StreamReader reader = new StreamReader(
new IsolatedStorageFileStream(
"QuoteHistory.txt", FileMode.Open,isoStore));

string quote = reader.ReadLine();
while( quote != null )
{
textBoxHistory.Text += quote;
textBoxHistory.Text += System.Environment.NewLine;
quote = reader.ReadLine( );
}
reader.Close();
} }

И вновь код должен быть достаточно ясным для вас – мы исследуем папку нашего хранилища на предмет наличия файла истории. Если он найден – его содержимое считывается и добавляется на панель истории.

Есть системные ограничения на размер Изолированного Хранилища, конфигурируются они с помощью приложения .NET Framework Configuration. Для зоны Интернет размер по умолчанию равен 10240 МБ, что позволит вам загрузить достаточно цитат и в то же время предотвратит винчестер пользователя от преднамеренного захламливания со стороны взломщика. Приложения, загруженные из интранет или других доверенных сайтов, имеют в распоряжении большее пространство.

Используйте этот шанс

Как ни крути, возможность такой инсталляции – шаг вперёд по сравнению с веб-формами. И вы уже не сможете использовать отсутствие необходимости инсталляции веб-приложений на машинах клиентов в их пользу. Но используйте такой подход только для приложений, которые достаточно малы – чтобы пользователь не ждал слишком долго их загрузки. (Microsoft Word в данном случае – не лучший пример :). Также учитывайте, какие в действительности ресурсы системы вам необходимы. Ведь многие приложения, которые вы пишите день ото дня, в действительности нуждаются в минимуме локальных ресурсов. В общем, при случае имейте ввиду приложение Windows Forms, которое может быть доступно с веб-страницы. CLR использует CAS и проверяемый код для того, чтобы убедиться в безопасности пользователей, также вы им можете дать большую функциональность и более простой путь к получению новых версий приложения.

{К содержанию}

Время кода

Сворачиваем приложение на C# в системный трей

ЯЗЫК: C#
АВТОР: Tom Archer
Код к статье : Демонстрационный код к статье

ПЕРЕВОД: Чужа В.Ф ака hDrummer

Вступление

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

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

1. Для начала откроем существующее приложение WinForms (или создадим новое).
2. Откроем панель компонент Visual Studio.
3. Перетащим компонент NotifyIcon на форму. Компонент по умолчанию получит имя notifyIcon1 и разместится под формой, поскольку у него нет собственного визуального представления на форме.
4. Установим свойство Text компонента NotifyIcon в тот текст, который должен появиться при наведении пользователем мышки на иконку приложения. Например, этот текст может быть таким "KillerApp 1.0".
5. Установим свойство Icon в ту иконку, которая должна появиться в системной области. Подсказка: Если у вас есть файл в формате BMP, который вы хотите конвертировать в файл формата иконки, то можно воспользоваться программой QTam Bitmap to Icon 3.5 application.
6. Добавим обработчик события формы Resize, который скроет приложение при его минимизации. Т.е. оно не появится в панели задач.

private void Form1_Resize(object sender, System.EventArgs e) {
if (FormWindowState.Minimized == WindowState)
Hide();
}

7. Добавим обработчик события для события NotifyIcon.DoubleClick и код для восстановления приложения после двойного щелчка.

private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
{
Show();
WindowState = FormWindowState.Normal;
}

На этом этапе ваше приложение работает так, как и задумывалось – отображается иконка в трее при нормальной работе приложения, приложение не отображается на панели при минимизации и восстанавливается в нормальный вид после двойного щелчка на иконке в трее.


Теперь займёмся добавлением контекстного меню к иконке.

1. С панели компонент Visual перетащим элемент управления ContextMenu на форму.
2. Правой кнопкой щёлкнем на элементе управления ContextMenu и выберем опцию Edit Menu.
3. Наберём те опции, которые нам нужны - например «Восстановить» и «Закрыть приложение».
4. Так же как и для любого меню, дважды щёлкнем на пункте меню и напишем обработчик события для каждого из пунктов меню. В качестве примера можно скопировать код из обработчика DoubleClick в обработчик нажатия подменю «Восстановить», а для обработчика нажатия на меню «Закрыть» просто нужно вызвать метод Close.
5. В итоге необходимо установить свойство ContextMenu элемента управления NotifyIcon во вновь созданное меню – и на этом всё!


{К содержанию}

Форумы .Net на SQL.RU - вопросы оставшиеся без ответа

Проблема с доступом к COM-объекту, написанному на C#
Непонятная проблема в Server 2003 (UnsafeNativeMethods.CallWindowProc)
как закинуть данные из грида в dataset?
Как запретить удаление определенных контролов из панели в дизайн-тайме?
Передача OLE объекта из COM+
Локализация DevExpress.XtraEditors
Неточности ADO под Oracle или невидимые свойства некоторых БД Oracle?
Помогите, плиз, начинающему
Просьба знающих решение обратить внимание (из форума по Oracle)
smartnavigation


На этом двадцать пятый выпуск .Net Собеседника закончен.
До следующего номера.



Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения, вопросы и замечания.


Рассылки Subscribe.Ru
.Net Собеседник - Новости мира Net, C#, ASP.Net

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.dotnetgrains
Отписаться

В избранное