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

№42 рассылки '.Net Собеседник':


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

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

Содержание
  1. От автора
  2. Обзор новостей
  3. На что взглянуть в ASP.NET 2.0
  4. Время кода - Быстрое чтение и запись конфигурационных файлов
  5. Форумы .Net на www.sql.ru

От автора

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

Не за горами - а именно 7 ноября 2005 года - выход финальных релизов VS.2005, SQL Server.2005 и .Net Framework 2.0, поэтому по-тихоньку будем перемещать фокус на новые технологии, реализованные во второй версии .Net. Та же тенденция будет прослеживаться и в журнале "Алгоритм", 3-й номер которого будет во многом посвящён именно технологиям, реализованным в .Net Framework 2.0.

На этом всё- желаю интересного чтения.

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

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

  1. Microsoft объявляет о датах поставок новых продуктов
    Microsoft объявила, что 7 ноября будет выпущено несколько новых продуктов - Visual Studio 2005, SQL Server 2005 и BizTalk Server 2006. BizTalk Server 2006 будет официально выпущен, но широко доступен только с начала 2006 года.
  2. Australian Software Company выпустила SQL Delta 3.1
    SQL Delta – высокоэффективный инструмент сравнения схем и данных в SQL серверах, предназначенный для анализа и синхронизации БД.
  3. Quiksoft Corp выпустила EasyMail.Net Verify
    Корпорация Quiksoft выпустила EasyMail.Net Verify. Этот компонент .Net позволит легко и аккуратно проверять в приложениях .Net адреса email в режиме реального времени. Цена $149 за лицензию на 1 ПК; $299 для разработчика.
  4. Mono CD
    Запущен сайт Mono Live детище Joseph Hill’a. Они предлагают Live CD Mono для тех, кто хочет попробовать разрабатывать на этой платформе. CD включает Mono, много приложений на Mono. Инструменты разработчика: Mono, MonoDoc, MonoDevelop. Веб-порталы: форумы ASP.NET, mojoPortal, IBuySpy. Настольные приложения: Beagle, F-Spot, Tomboy, Muine. ISO лежит здесь http://go-mono.com/archive/live-cd/hoary-mono-live_1_0-i386.iso.  
  5. Лето кода
    Google спонсирует студентов-разработчиков под Mono, предлагается приз в $4,500.
  6. Microsoft открыла новый сайт для ОС Windows «Longhorn»
    Сайт находится здесь - http://www.microsoft.com/windows/longhorn/default.mspx.  
  7. Обновился .netCHARGE 4.5
    Обработка кредитных карт в режиме реального времени – поддержка более 40 шлюзов.

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

Статья номера

На что взглянуть в ASP.NET 2.0

ЯЗЫК: C#
Автор статьи: Jinath Premaratne

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

Вступление

Цель статьи – обратить ваше внимание на некоторые особенности ASP.NET 2. Статья базируется на beta 1 asp.net 2. Несколько последних лет мы обсуждали asp.net 1 /1.1, а также каким образом изменилась жизнь программиста. Теперь поговорим о asp.net 2 – последней революционной версии. Здесь так много новых вещей, о которых стоит поговорить, от простых компонент логина до управления ролями. В этой статье опишу просто несколько революционных вещей, на которые следует обратить внимание.

Производительность

Говоря о производительность разработчика, Microsoft утверждает, что в ASP.NET версии 2 необходимо на 70% меньше кодирования, чемв asp.net 1.1. Один из примеров – новый элемент управления GridView. Он имеет встроенную способность разбиения на страницы, сортировки и редактирования. После создания объекта Data Source и назначения его этому элементу управления (ЭУ), вам необходимо сделать только небольшие изменения в окне свойств или в коде html для включения разбивки на страницы или сортировки. Никакого дополнительного кода не требуется, asp.net будет делать всё это за вас и так. Вот как выглядит html.

<asp:GridView ID='GridView1' Runat='server' DataSourceID='SqlDataSource1' AutoGenerateColumns='False' AllowPaging='True' PageSize='5' AllowSorting='True'>

Эффективность

Если говорить об эффективности ASP.NET 2, то, прежде всего она включает новые возможности по кэшированию, интегрированную с Microsoft SQL Server и называемую «недостоверность кэша SQL». Теперь вы можете создавать зависимости кэша от таблиц Sql. При использовании «недостоверного кэша SQL», при изменении таблицы, ASP.NET получит последнее время её изменения с сервера и изменит её, не взирая на установленную продолжительность жизни кэша.

Также asp.net 2 поддерживает 64-битные процессоры – как от Intel, так и от AMD. ASP.NET 2 обратно совместима с ASP.NET 1/1.1. Можно просто перекомпилировать приложение ASP.NET 1/1.1 под .Net framework 2.0 – и оно будет работать.

ЭУ для мобильных устройств?

ASP.NET 2 может определять целевую платформу – т.е. веб-страница будет работать как в веб-браузере, так и в мобильном телефоне. Тэги <asp:> будут исполнять весь рендеринг. И уже нет необходимости использовать отдельные тэги <mobile:>. Серверные ЭУ ASP.NET теперь могут рендериться от HTML до WML.

Логин пользователя

Общей задачей при разработке веб-приложений является обеспечение безопасности и управления ролями. В asp.net 2 теперь нет необходимости создавать формы входа – они встроены в виде ЭУ и имеют новый API для обработки членства пользователей и управления ролями. Для хранения пользователей и ролей, asp.net 2 использует БД MS Access, однако возможно это делать и в SQL Server и в AD. Ну а в принципе можно использовать любое хранилище данных – например Оракл, если он вам больше нравится.

Персонализация

Это ещё одна приятная новость в ASP.NET 2. Появилась возможность персонализации приложения и сохранения персонализированных установок. Это значит, что приложение может сохранять настройки цвета, стиля, шрифтов и т.п. согласно пользовательским установкам. Используя API персонализации, наряду с управлением ролями и членством, можно строить действительно настраиваемые пользователем приложения.

Каркасы порталов и веб-детали (Web Parts)

Проще говоря, каркасы порталов и веб-детали – это страницы, которые могут быть настроены пользователем. Веб-детали содержат объекты в каркасе портала, которые конечный пользователь может открыть, закрыть, минимизировать, максимизировать или переместить из одной веб-детали в другую. Каркас портала позволяет компилировать страницы, содержащие веб-детали, которые представлены теперь в виде ЭУ. Это менеджер веб-деталей, зоны веб-деталей, каталог зон веб-деталей. Хороший пример – зона администрирования пространства MSN space. Там можно изменять расположение, открывать или закрывать ваши веб-детали.

Мастер-страницы

Мастер-страницы – это пример визуального наследования. Обычно веб-сайт имеет один заголовок, меню и подвал для всех страниц. Раньше разработчикам приходилось включать эти элементы в страницу каждый раз, а теперь достаточно создать мастер-страницу, которая будет базовой для всех остальных страниц.

Администрирование и Менеджмент


Теперь жизнь администраторов веб-сайтов станет легче, т.к. asp.net 2 содержит вставку для Microsoft Management Console (MMC), позволяющую администрировать веб-сайты. Там же можно редактировать machine.config и web.config. Также ASP.Net 2 включает инструменты администрирования, доступные через веб-браузер. Здесь можно добавлять и удалять пользователей, роли, управлять правами и делать многое другое.

Новые серверные ЭУ

В Asp.net 2 есть новые серверные ЭУ.

  1. Gridview отображает данные, легко настраивается под множество задач.
  2. Набор ЭУ, называемых Data Source Object, которые будут работать с БД – соединение, добыча данных, манипулирование данными, сортировка, разбиение на страницы, редактирование и т.п.
  3. Набор ЭУ для обработки пользовательского логина и управления пользователями
  4. ЭУ для создания веб-деталей
  5. ЭУ для навигации по сайту и меню – базируются на использовании XML
  6. Долгожданный ЭУ дерево (TreeView)
  7. И многое другое
Также некоторые изменения произошли с ЭУ asp.net 1.0. Например, для серверных ЭУ Button, LinkButton и ImageButton вы можете легко вызывать клиентские скрипты, используя свойство OnClientClick:

<script language="javascript"> function print(){ alert("No More Tsunami"); } </script> <asp:ButtonID = "Button1" Runat = "server" OnClientClick = "javascript:print()" Text ="Button" />

Жизнь всё легче, не так ли?

Работаем с данными

В asp.net 1\1.1 для отображения данных необходимо было выполнить несколько шагов – создать объект –соединение, создать адаптер с командой select, создать набор данных DataSet, связать его с адаптером, затем с сеткой данных и вызвать метод связывания.
Теперь всё проще – можно не писать ни строчки кода. Например, для отображения данных из SQL Server в виде сетки, необходимо написать вот такой HTML:

<asp:GridView ID="GridView1" Runat="server" DataSourceID="SqlDataSource1" AllowSorting="true"> </asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT * FROM [Students]" ProviderName="System.Data.SqlClient" ConnectionString="Server=.;;Database=CDNUG;Persist Security Info=True"> </asp:SqlDataSource>

Всё, что тут сделано – создан ЭУ GridView, ему присвоен DataSourceID в виде 'SqlDataSource1', который является ID моего SqlDataSource. А для SqlDataSource я установил значения свойств ID, SelectCommand, ProviderName и ConnectionString. Ивсё – теперь у вас есть страница с данными. Кроме SqlDataSource, asp.net имеет AccessDataSource, ObjectDataSource, DataSetDataSource и SiteMapDataSource, также можно создать свой собственный объект DataSource.

Visual studio 2005

Asp.net 2 поддерживает новую среду разработки Visual studio 2005, одним из преимуществ которой является наличие встроенного веб-сервера для разработки веб-приложений.

Выводы

С набором новых средств и существенно улучшенных существующих, Asp.Net 2 станет ключевойй технологией в мире веб-разработки. Стоит также вспомнить о нововведениях в языки Visual basic 8.0 и c# 2.0. В статье приведены лишь некоторые из особенностей ASP.Net 2.0, полную версию статьи вы сможете найти в журнале «Алгоритм» №3 за 2005 год.

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

Время кода

Быстрое чтение и запись конфигурационных файлов

ЯЗЫК: C#
Автор статьи: Chandar Ockumar

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


Вступление

Эта статья подобна статье Ayende Rahien по считыванию конфигурационных файлов на C#, без использования функций Win32. Единственное отличие в том, что этот код более быстр и не зависит от данных в памяти, поскольку файл может быть изменён другим приложением, перед тем, как наше приложение его будет обрабатывать. Так что следующий код просто последовательно считывает файл, а после обнаружения нужной секции или ключа отрабатывает и закрывает файл. Недостаток такого подхода в том, что при каждом вызове функции происходит открытие и закрытие файла – нужна модификация или нет. Это плата за уверенность в том, что используются последние изменения, внесённые в файл..

using System;
using System.IO;
using System.Collections.Specialized;

namespace IniMgr
{
   public class IniTask
   {
      public static void SetIniString(string sFile, string Sec,
                                      string Key, string Val)
      {
         StreamReader sr = null;
         string nueLineChars = "\r\n";    
// определяем символы перевода строки

// но находим по умолчанию символы новой строки из
// System.IO.TextWriter
         if(true)
         {
            StringWriter tw = new StringWriter();
            nueLineChars    = tw.NewLine;
         }

         string slines = null;
         if (File.Exists(sFile))
         {
            bool reWrite = false;
            using ( sr = new StreamReader(sFile))
            {
               String line;
               bool foundSection = false;
               while ((line = sr.ReadLine()) != null)
               {
                  line = line.Trim();
                  if(line.Length > 1)
                  {
                     if(line[0] == '[')
                     {
                        int end = line.IndexOf("]");
                        if(end != -1)
                        {
                           string section = line.Substring(1,
                                                           end-1);
                           if(String.Compare(section,Sec,true)==0)
                           {
                              foundSection = true;
                              slines += line + nueLineChars;
                              continue;
                           }
                           else
                           {
                              if(foundSection == true)
                              {
// мы не нашли свой ключ,
//поэтому добавляем его
                                 slines += Key + "=" + Val
                                               + nueLineChars;;
                                 slines += line + nueLineChars;
                                 line    = sr.ReadToEnd();
                                 slines += line;
                                 reWrite = true;
                                 break;
                              }
                           }
                        }
                     }
                     if(foundSection == true)
                     {
                        string [] pair = line.Split('=');
                        if(pair.Length > 1)
                        {
                           if(String.Compare(pair[0], Key,true)
                                     == 0)
                           {
                              line = Key + "=" + Val
                                               + nueLineChars;
                              slines += line;
                              line    = sr.ReadToEnd();
                              slines += line;
                              reWrite = true;
                              break;
                           }
                        }
                     }
                  }
                  slines += line + nueLineChars;
               }
               if(foundSection == false)
               {
                  slines += "[" + Sec + "]" + nueLineChars;
                  slines += Key + "=" + Val  + nueLineChars;
                  reWrite = true;
               }
               if(foundSection == true && reWrite == false)
               {
                  slines += Key + "=" + Val  + nueLineChars;
                  reWrite = true;
               }
            }
            if( reWrite == true)
            {
               using (StreamWriter sw = new StreamWriter(sFile))
               {
                  sw.Write(slines);
               }
            }
         }
         else
         {
            slines = "[" + Sec + "]" + nueLineChars;
            slines += Key + "=" + Val  + nueLineChars;
            using (StreamWriter sw = new StreamWriter(sFile))
            {
               sw.Write(slines);
            }

         }
      }
      public static string GetIniString(string sFile, string Sec,
                                        string Key, string Val)
      {
         StreamReader sr = null;
         if (File.Exists(sFile))
         {
            using ( sr = new StreamReader(sFile))
            {
               String line;
// считываем и отображаем строки
// пока не достигнут конец файла
               bool foundSection = false;
               while ((line = sr.ReadLine()) != null)
               {
                  line = line.Trim();
                  if(line.Length > 1)
                  {
                     if(line[0] == '[')
                     {
                        int end = line.IndexOf("]");
                        if(end != -1)
                        {
                           string section = line.Substring(1,
                                                           end-1);
                           if(String.Compare(section, Sec, true)
                              == 0)
                           {
                              foundSection = true;
                              continue;
                           }
                           else
                              foundSection = false;
                        }
                     }
                     if(foundSection == true)
                     {
                        string [] pair = line.Split('=');
                        if(pair.Length > 1)
                        {
                           if(String.Compare(pair[0], Key, true)
                               == 0)
                           {
                              Val = pair[1];
                              break;
                           }
                        }
                     }
                  }
               }
            }
         }
         return Val;
      }
// ещё немного функциональности
      public static StringCollection GetSections(string sFile)
      {
         StreamReader sr       = null;
         StringCollection myAL = new StringCollection();
         if (File.Exists(sFile))
         {

            using ( sr = new StreamReader(sFile))
            {
               String line;
// считываем строки, пока не достигнут конец файла
               while ((line = sr.ReadLine()) != null)
               {
                  line = line.Trim();
                  if(line.Length > 1)
                  {
                     if(line[0] == '[')
                     {
                        int end = line.IndexOf("]");
                        if(end != -1)
                        {
                           string section = line.Substring(1,
                                                           end-1);
                           myAL.Add(section);
                        }
                     }
                  }
               }
            }
         }
         return myAL;
      }
      public static StringCollection GetSectionKeys(string sFile,
                                                    string Sec)
      {
         StreamReader sr = null;
         StringCollection myAL = new StringCollection();
         if (File.Exists(sFile))
         {
            using ( sr = new StreamReader(sFile))
            {
               String line;
// считываем строки, пока не достигнут конец файла
               bool foundSection = false;
               while ((line = sr.ReadLine()) != null)
               {
                  line = line.Trim();
                  if(line.Length > 1)
                  {
                     if(line[0] == '[')
                     {
                        int end = line.IndexOf("]");
                        if(end != -1)
                        {
                           string section = line.Substring(1,
                                                           end-1);
                           if(String.Compare(section, Sec, true)
                              == 0)
                           {
                              foundSection = true;
                              continue;
                           }
                           else
                           {
                              if(foundSection == true)
                              {
                                 break;
                              }
                              foundSection = false;
                           }
                        }
                     }
                     if(foundSection == true)
                     {
                        string [] pair = line.Split('=');
                        if(pair.Length > 1)
                        {
                           myAL.Add(pair[0]);
                        }
                     }
                  }
               }
            }
         }
         return myAL;
      }
   }
}

Вот и всё.


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

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

DataView и стиль
datalist в локальных приложениях windows
dropdownlist в DataGrid
Несколько ДатаГридов с одинаковой шириной столбцов (динамической)???
Jscript и тэг
DreamWeaver - ПОМОГИТЕ !!!
StateImage Icon in DataGrid
Позднее связывание в Wordе
ICQ-клиент


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


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



Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.dotnetgrains
Отписаться
Вспомнить пароль

В избранное