CITKIT.ru
3 терабайта свободного софта!
Logo    
IT-рынок Новости мира IT Океан(!) софта на CITKIT.ru Форумы Поступления в библиотеку Учебный центр Курилка
CitForum    CITForum на CD Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование Open Source СУБД Безопасность Internet Сети Операционные системы Hardware

30.05.2005

Google
WWW CITForum.ru

Новости мира IT:

  • 20.05 - У Центробанка России похитили новую базу данных
  • 20.05 - Домашнюю страницу Google теперь можно персонализировать
  • 20.05 - В новом Netscape обнаружены старые "дыры"
  • 20.05 - Крупнейшие сотовики создали объединенную базу должников
  • 20.05 - Пиратские копии последней серии "Звездных войн" уже "разгуливают" в интернете
  • 20.05 - Русские программисты покорили Америку
  • 20.05 - IP-телевидение "Открытых Технологий"
  • 20.05 - Netscape 8 настроен обороняться от фишеров
  • 20.05 - "Яндекс" выпустил антиспамовый фильтр
  • 20.05 - ИТ-гиганты хотят отобрать Wi-Fi-патенты у Австралии
  • 19.05 - Software-testing.Ru будет развиваться при поддержке Borland
  • 19.05 - Intel прекращает выпуск Pentium M с частотой шины 400 МГц
  • 19.05 - Госсекреты США утекают через Wi-Fi-сети
  • 19.05 - Microsoft выпустила руководство по безопасности
  • 19.05 - Вышла финальная версия браузера Netscape 8.0
  • 19.05 - Intel готовит аппаратную платформу для корпоративных ПК
  • 19.05 - Бесплатные звонки через Yahoo! стали удобнее
  • 19.05 - Google купил два домена за миллион долларов
  • 19.05 - Соколов уверен: Рунет невозможно контролировать
  • 19.05 - В штате Вашингтон принят суровый закон против шпионского ПО
  • 19.05 - Google предложил настольный поисковик для бизнеса
  • 19.05 - Почту на Mail.Ru теперь можно слушать по мобильному телефону
  • 18.05 - Intel и Novell: Linux догоняет Microsoft в Бразилии
  • 18.05 - Gartner: IBM с Geronimo составит конкуренцию JBoss, BEA, Oracle
  • 18.05 - Seiko создала часы на основе "электронных чернил"
  • 18.05 - Японские батарейки работают на человеческой крови
  • 18.05 - PalmOne анонсировал КПК LifeDrive
  • 18.05 - Студенты МГУ будут обучаться на SAP
  • 18.05 - Intel запускает платформу для настольных ПК
  • 18.05 - Безопасность VPN оказалась виртуальной
  • 18.05 - Microsoft и Toshiba договорились об использовании патентов друг друга
  • 18.05 - Вторая версия Free Pascal: код полностью переписан
  • 18.05 - США будут искать террористов в интернете
  • 18.05 - Через пять лет все существующее ПО будет подделываться пиратами
  • 18.05 - Интернет-провайдеры Китая будут следить за пиратами в Сети
  • 18.05 - ЮТК построила мультимедийную МСС
  • 18.05 - "Альфа" подала иск о недействительности устава "Вымпелкома"
  • 18.05 - NTT DoCoMo представила мобильники с системой мобильного кошелька
  • 18.05 - В Байнете появился самообучающийся антиспам
  • 18.05 - AIM и ICQ интегрируют в онлайновые игры

    Архив новостей >>>


  • 2004 г.

    Разработка WEB-сервисов в среде Delphi 8

    Евгений Веселов, Михаил Голованов, «Королевство Delphi»

    Что такое WEB-сервис ?

    Что такое WEB-сервис наверное знает каждый. WEB-сервисы не собственность компании Microsoft, а целый промышленный стандарт на основе открытых протоколов HTTP и SOAP, однако использование в качестве средства разработки платформы .NET позволит создавать WEB-сервисы очень быстро и просто.

    WEB-сервисы представляют собой специального типа WEB-приложения, не имеющие пользовательского интерфейса. Однако благодаря наличию WEB-методов могут в реальном времени предоставлять информацию о… да о чем угодно ! Будь то прогноз погоды или курс валют, информация о наличии свободных мест на утренний сеанс в Вашем любимом кинотеатре. Одним словом - WEB-сервис предоставляет услуги другим приложениям, причем последние могут быть любого типа, как WEB-приложениями так и обычными приложениями с графическим интерфейсом. WEB-сервис имеет следующие отличительные особенности:

    • Выполняется на стороне сервера
    • Предоставляет набор методов, доступных внешним клиентам.
    • Исполняет WEB- методы и возвращает результаты клиентам
    • WEB-сервис и его клиенты могут быть написаны на разных языках и/или разных платформах.

    На этом позволим себе временно отстраниться от теории и перейти к практике

    Простейший WEB-сервис

    Давайте запустим Delphi 8 и создадим WEB-сервис, который назовем SampleWebService

    Рис.1 Выбор типа создаваемого приложения
    Рис.1 Выбор типа создаваемого приложения

    Рис.2 Диалог создания  проекта.
    Рис.2 Диалог создания проекта.

    Delphi 8 создаст для нас простейший WEB-сервис. Состав файлов в проекте WEB-сервиса требует отдельного описания, которое будет дано немного позже. Сейчас же рассмотрим файл WebService1.pas, который содержит описание класса TWebService1

    TWebService1 = class(System.Web.Services.WebService)
      {$REGION 'Designer Managed Code'}
      strict private
        /// <summary>
        /// Required designer variable.
        /// </summary>
        components: IContainer;
        /// <summary>
        /// Required method for Designer support - do not 
        /// modify the contents of this method with 
        /// the code editor.
        /// </summary>
        procedure InitializeComponent;
      {$ENDREGION}
      strict protected
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        procedure Dispose(disposing: boolean); override;
      private
        { Private Declarations }
      public
        constructor Create;
        (*
        // Sample Web Service Method
        [WebMethod]
        function HelloWorld: string;
        *)
      end;
    

    Обратите внимание на закомментированный метод WEB-метод HelloWorld, (WEB-метод он потому, что ему назначен атрибут [WebMethod]). Давайте попробуем раскоментировать его и его реализацию. Вот и все. Наш первый WEB-сервис готов. Как его протестировать? Очень просто, нажмите F9.

    Результат не заставить себя долго ждать, вы увидите страницу подобную приведенной на рис. 3.

    Рис 3. Автоматически  сгенерированная страница-описание WEB-сервис
    Рис 3. Автоматически сгенерированная страница-описание WEB-сервис

    Как протестировать WEB-метод Вы наверное уже догадались? Если нет, то кликните по ссылке HelloWorld.

    рис 4. Тестирование WEB-метода
    рис 4. Тестирование WEB-метода

    После нажатия на кнопку "Invoke" наш WEB-сервис стартует и вернет потрясающий результат в виде XML:

    <?xml version="1.0" encoding="utf-8" ?> 
      <string xmlns="http://tempuri.org/">Hello World

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

    WEB-методы

    Атрибут WebMethod

    Как и было заявлено выше, обычный метод класса отличается от метода, публикуемого WEB-сервисом только наличием атрибута WebMethod. Данный атрибут имеет составной характер, т.е может содержать следующие податрибуты (Рассмотрим лишь некоторые из них):

    • CacheDuration - Кэширование результатов работы метода на заданное количество секунд. (например, метод с такими атрибутами будет хранить результат своей работы в течении 15 секунд : [WebMethod(CacheDuration="15")] ).
    • Description - Добавляет текстовое описание WEB-метода.
    • MessageName - Имя WEB-метода. Полезно, например, когда нужно опубликовать перегруженный метод класса.(наличие двух одноименных WEB-методов запрещено)

    В качестве примера давайте добавим к нашему классу еще два метода и добавим описание к существующему методу HelloWorld:

    TWebService1 = class(System.Web.Services.WebService)
      // Экономия  места
      public
        constructor Create;
        // Sample Web Service Method
    
        [WebMethod
        (MessageName = 'HelloWorld' , Description = 
                       'Простой метод')]
        function HelloWorld:String;
    
       [WebMethod (MessageName = 'IntegerSubstract')]
         function Substract(a,b:Integer):Integer;overload;
    
        [WebMethod (MessageName = 'FloatSubstract')]
        function Substract(a,b:Single):Single;overload;
    
    Реализация методов тривиальна:
    
    function TWebService1.Substract(a,b:Integer):Integer;
    begin
     Result := a - b;
    end;
    
    function TWebService1.Substract(a,b:Single):Single;
    begin
     Result:= a - b;
    end;
    

    Запустите добавленные WEB-методы. Обратите внимание, что мы использовали механизм перегрузки функций, но при этом не пострадали от ограничений связанных с именованием WEB-методов: WEB-сервис предоставляет их как методы с различными именами.

    Сложные типы данных в WEB-методах

    Все то, что было показано до этого, выглядело неплохо. Однако на практике не очень часто приходится оперировать простыми типами данных, как это было показано в предыдущих примерах. Очень часто возникает необходимость вернуть сложный тип данных (например, объект).

    На самом деле решение проблемы не представляет особых сложностей. Давайте попробуем ее решить. Итак, пусть нам необходимо создать сервис, возвращающий курс доллара за указанный промежуток времени.

    Итак, курс доллара будет представлен следующим классом:

    TDollarRate = class
      public
        Cost:Integer;
        Date:TDateTime;
       constructor Create;
      end;
    
    constructor TDollarRate.Create;
    begin
     inherited Create;
     Cost:=20 + Random(5);
     Date:=DateToStr(DateTime.Now);
    end;
    

    Перед добавлением WEB-метода объявим тип TDollarRates = Array of TDollarRate, в секцию uses добавим Borland.Vcl.SysUtils. Метод имеет вид:

    [WebMethod]
      function GetRatesForDays (ADays:Integer):TDollarRates;
    
      function TWebService1.GetRatesForDays 
              (ADays:Integer):TDollarRates;
    var
      i:Integer;
    begin
      SetLength(Result,ADays);
      for i:=ADays-1 downto 0  do
      Result[i]:=TDollarRate.Create;
    end;
    

    Попробуем протестировать метод (рис 5).

    Рис. 5 Тестирование метода, возвращающего массив объектов
    Рис. 5 Тестирование метода, возвращающего массив объектов Результат превзошел все ожидания:

      <?xml version="1.0" encoding="utf-8" ?> 
    - <ArrayOfTDollarRate 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://tempuri.org/">
    - <TDollarRate>
      <Cost>23 
      <Date>28.04.2004 
      </TDollarRate>
    - <TDollarRate>
      <Cost>23 
      <Date>28.04.2004 
      </TDollarRate>
    - <TDollarRate>
      <Cost>20 
      <Date>28.04.2004 
      </TDollarRate>
      </ArrayOfTDollarRate>
    

    В процессе разработки этого примера мы были неприятно удивлены одной деталью (версия Delphi 8 7.1.1146.610): мы попытались объявить новый конструктор с параметрами:

    TDollarRate = class
      public
        Cost:Integer;
        Date:TDateTime;
       constructor Create(Adays:Integer);
      end;
    
    constructor TDollarRate.Create(Adays:Integer);
    var sDate:TDateTime;
    begin
     inherited Create;
     {Код}
    end;
    

    и получили следующую ошибку при старте WEB-сервиса:

    рис 6. Как же переопределить конструктор ?
    рис 6. Как же переопределить конструктор ?

    Как сделать новый конструктор Default public в Delphi 8 не совсем понятно, однако выручило переименование конструктора следующим образом:

    TDollarRate = class
      public
        Cost:Integer;
        Date:String;
       constructor TDollarRate(Adays:Integer);
      end;
    

    Результат работы стал таким:

    "?xml version="1.0" encoding="utf-8" ?> 
    - <ArrayOfTDollarRate 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://tempuri.org/">
    - <TDollarRate>
      <Cost>21 
      <Date>26.04.2004 
      </TDollarRate>
    - <TDollarRate>
      <Cost>24 
      <Date>26.04.2004 
      </TDollarRate>
      </ArrayOfTDollarRate>
    

    На этом описание WEB-методов завершается. Перед тем, как рассказать о том, каким образом клиентское приложение может взаимодействовать с нашим WEB-сервисом, а также каким образом оно будет "понимать" не только простые, но и "сложные" типы данных рассмотрим подробнее, из каких частей состоит WEB-сервис.

    Архитектура WEB-сервиса

    По большому счету WEB-сервис представляется всего одним файлом, с расширением Asmx, который должен как минимум иметь примерно такой заголовок:

    <%@ WebService Language="c#"  
        Class="WebService1.TWebService1" %>

    Далее может идти код, собственно реализующий функциональность WEB-сервиса. Этот код должен быть написан на одном из языков .NET платформы (например C#).

    К великому сожалению, создать WEB-сервис на Object-Pascal таким образом пока нельзя. Однако разработчики платформы .NET предусмотрели возможность перенести код WEB-сервиса в отдельно компилируемую DLL(фоновый код). Частично для того, чтобы была возможность разрабатывать WEB-приложения на языках, непосредственно не поддерживающих ASP.NET, частично для того, чтобы диагностировать ошибки компиляции до развертывания самого сервиса.

    Как вы уже догадались, Delphi 8 создает проект, компилируемый в DLL( которая, в свою очередь, помещается в корневой каталог приложения) и состоящий из таких частей:

    1. Автоматически сгенерированный файл <Имя сервиса>.asmx, состоящий из заголовка примерно такого вида:
      <%@ WebService Language="c#" Debug="true" 
                     Codebehind="WebService1.pas" 
      	              Class="WebService1.TWebService1" %>
    2. <Имя сервиса>.pas с которым мы успешно работали :-)
    3. Global.asax, и его Pascal-реализация. Для чего он нужен, можно почитать в MSDN.

    Как вы наверняка уже догадались для тестирования сервиса достаточно в браузере набрать строку

    http://localhost/<путь к сервису>/<имя сервиса>.asmx

    Для вызова метода

    http://localhost/<путь к сервису>/
    <имя сервиса>.asmx /? Op= <имя операции>.

    WSDL - язык описания WEB-сервисов.

    Мы практически готовы к тому, чтобы перейти к созданию клиента для нашего WEB-сервиса. Нам осталось только узнать как сторонние разработчики (пользователи нашего сервиса) могут узнать какие методы поддерживает WEB-сервис, сигнатуры этим методов, URL сервиса, типы используемых данных. Вся эта информация описывается при помощи языка WSDL. Тем не менее, вам не придется его изучать, так как этот язык больше для компьютеров, не для людей. Как же получить описание нашего WEB-сервиса на языке WSDL? Да очень просто, достаточно ввести в браузере

    http://localhost/<путь к сервису>/<имя сервиса>.asmx?wsdl

    Ниже приведено описание TDollarRates и TDollarRate нашего примера:

    - <s:complexType name="ArrayOfTDollarRate">
    - <s:sequence>
      <s:element minOccurs="0" maxOccurs="unbounded" 
                 name="TDollarRate" 
                 nillable="true" type="s0:TDollarRate" /> 
      </s:sequence>
      </s:complexType>
    - <s:complexType name="TDollarRate">
    - <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="Cost" 
                 type="s:int" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Date" 
                 type="s:string" /> 
      </s:sequence>
      </s:complexType>
    

    Создание клиента для WEB-сервиса.

    После стольких усилий по изучению WEB-сервисов пришло время научится их использовать. Как и всегда ничего сложного в этом нет. В качестве примера создадим VCL Forms приложение. Его главная и единственная форма должна выглядеть примерно так:

    Рис. 7. Форма Веб-Калькулятора
    Рис. 7. Форма Веб-Калькулятора

    Осталось только "оживить" нашу форму. Для этого выберите пункт меню Project/Web Reference.

    В диалоге, который откроется, укажите URL к WSDL описанию нашего сервиса В нашем случае это -

    http://localhost/SampleWebService/WebService1.asmx?WSDL

    Нажмите кнопку "GO" а потом "AddReference".

    Рис. 8. Добавление ссылки на WEB-сервис.
    Рис. 8. Добавление ссылки на WEB-сервис.

    Прокси WEB-сервиса

    В общем-то, ничего особенно не изменилось, за исключением того, что в проект был добавлен файл localhost.WebService1.pas, содержащий в себе класс TWebService1. Этот класс называется прокси WEB-сервиса, это локальный представитель WEB-сервиса для нашего клиентского приложения. Файл localhost.WebService1.pas сгенерирован автоматически, и менять его реализацию не рекомендуется, однако если посмотреть на него ближе (здесь приведена только секция interface) можно сделать некоторые выводы.

    Итак:

    1. Прокси WEB-сервиса не выполняет никаких действий, но переправляет вызовы методов WEB-сервису.
    2. Прокси обязательно должен знать, с каким WEB-сервисов он связан, что подтверждается реализацией его конструктора:
      constructor TWebService1.Create;
      begin
        inherited Create;
        Self.Url := 'http://localhost/SampleWebService
                           /WebService1.asmx';
      end;
      
    3. Прокси обеспечивает вызов WEB-методов в синхронном и асинхронном режимах.

    Вызов WEB-методов. Асинхронный режим.

    Ниже приведен код нашего клиентского приложения, умеющего выполнить WEB-метод, и отобразить результат:

    unit Umain;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, 
      Graphics, Controls, Forms, Dialogs, 
      Borland.Vcl.StdCtrls, System.ComponentModel,
      localhost.WebService1;
    
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Edit3: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        FWEBProxy:TWebService1;
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.nfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     FWEBProxy:=TWebService1.Create;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Edit3.Text:= IntToStr(FWEBProxy.Substract
      (StrToInt(Edit1.Text),StrToInt(Edit2.Text) ));
    end;
    
    end.
    

    Рис 9. Веб калькулятор в действии
    Рис 9. Веб калькулятор в действии

    Теперь давайте усложним задачу? Заставим метод Substract возвращать результат через определенное время? В этом случае наше клиентское приложение попросту будет "висеть" пока WEB-метод не отработает. Давай добавим в WEB-метод Substract нашего WEB-сервиса имитацию бурной деятельности:

    function TWebService1.Substract(a,b:Integer):Integer;
    var i:Integer;
    begin
     Sleep(5000);
     Result := a - b;
    end;
    

    Так вот теперь, если запустить наш калькулятор, он будет успешно зависать на почти пять секунд. Возможно, нам нужно выполнять программу дальше, даже если результат WEB-метода еще не получен? Для этого существует возможность вызвать метод асинхронно.

    Обратите внимание на то что в описании интерфейса прокси класса есть методы Begin<имя WEB-метод> и End<WEB-метод>, например BeginSubstract, EndSubstract. Схема их использования примерно таковы:

    1. BeginSubstract, EndSubstract
      procedure TForm1.Button1Click(Sender: TObject);
      var asyncres:IAsyncResult;
      begin
        asyncres:=FWEBProxy.BeginSubstract
                  (StrToInt(Edit1.Text),
                  StrToInt(Edit2.Text),nil,nil);
        // какой-то код
        Edit3.Text:= IntToStr(FWEBProxy.EndSubstract
                     (asyncres));
      end;
      

      Это означает, что метод BeginSubstract инициирует выполнение WEB-метода, но при этом не останавливает выполнение основного приложения. В момент вызова EndSubstract завершается выполнение WEB-метода. Если последний еще не отработал - клиентское приложение блокируется до завершения работы метода.

    2. Использование свойства IsCompleted интерфейса IAsyncResult.
      procedure TForm1.Button1Click(Sender: TObject);
      var asyncres:IAsyncResult;
      begin
         asyncres:=FWEBProxy.BeginSubstract
                   (StrToInt(Edit1.Text),
                   StrToInt(Edit2.Text),nil,nil);
         while not asyncres.IsCompleted 
               do Application.ProcessMessages;
         Edit3.Text:= IntToStr(FWEBProxy.EndSubstract
                      (asyncres));
      end;
      
    3. Подписка за событие о завершении асинхронного вызова.
      unit Umain;
      
      interface
      
      uses
        Windows, Messages, SysUtils, Variants, Classes, 
        Graphics, Controls, Forms, Dialogs, 
        Borland.Vcl.StdCtrls, System.ComponentModel,
        localhost.WebService1;
      
      type
        TForm1 = class(TForm)
          Edit1: TEdit;
          Edit2: TEdit;
          Label1: TLabel;
          Label2: TLabel;
          Edit3: TEdit;
          Button1: TButton;
          procedure FormCreate(Sender: TObject);
          procedure Button1Click(Sender: TObject);
        private
          FWEBProxy:TWebService1;
          procedure SubstratctFinished (Res:IAsyncResult);
          { Private declarations }
        public
          { Public declarations }
        end;
      
      var
        Form1: TForm1;
      
      implementation
      
      {$R *.nfm}
      
      procedure TForm1.FormCreate(Sender: TObject);
      begin
       FWEBProxy:=TWebService1.Create;
      end;
      
      procedure TForm1.Button1Click(Sender: TObject);
      begin
       FWEBProxy.BeginSubstract(StrToInt(Edit1.Text),
                                StrToInt(Edit2.Text),
         SubstratctFinished,nil);
      end;
      
      procedure TForm1.SubstratctFinished
                      (Res: IAsyncResult);
      begin
       Edit3.Text:= IntToStr
                    (FWEBProxy.EndSubstract(Res));
      end;
      
      end.
      

    Заключение

    В этой статье мы показали особенности создания WEB-сервисов при помощи Delphi 8. Надеемся, что она поможет Вам в работе.
     


    SUPERSERVERS.RU - Аренда и Размещение Выделенных серверов! P4 2.6Ghz; 512 RAM; 2x80Gb SATA за 89 у.е./месяц. Бесплатный траффик.


    ХАЙВЕЙ - лучший российский хостинг-провайдер: хостинг, регистрация доменов, услуга Ваша@почта, поддержка 24 часа


    NetPromoter - единственный российский профессиональный комплекс программ и сервисов для раскрутки сайта и интернет-статистики


    STSS - известный поставщик надежных серверных решений различного назначения на платформе Intel (Xeon) и AMD.


    Подписка на новости IT-портала CITForum.ru
    (библиотека, ftp-архив CITKIT.ru)

    Новые поступления в on-line библиотеку:

    19 мая

  • RAID-массивы начального уровня
  • Волокно на весу
  • КрUтой FTP-сервер (о программе Serv-U)
  • Повышенная переносимость (о переносе данных на новый компьютер под управлением Windows XP)

    17 мая

    Большие перемены в разделе Все об Open Source

    Новые статьи:

  • О свободе выбора в чтении документации
  • Linux и языки Восточной Азии. С чего начать начинающему?
  • UNIX 5-th Edition на x86, или не забывайте историю
  • Запись CD-R/RW в BSD-системах
  • DragonFly: монтирование образов CD- и DVD-дисков
  • Монтирование сменных устройств для FreeBSD без прав root'а
  • Монтирование cd (с правами пользователя) в FreeBSD 5.3. Продолжение темы
  • FreeBSD 5.3 для конечного пользователя: три аспекта мультимедиа

    Снова дискуссия:

  • Каждому свое!
  • О сравнении Windows и Linux
  • Еще раз о доблести и злокозненности(А.Федорчук)

    12 мая

  • Материалы конференции "Корпоративные базы данных-2005"
  • Репортаж с Open Source Forum Russia
  • Взаимодействие Microsoft Excel с приложениями .NET. Позднее связывание
  • PC-BSD: вхождение в берклианскую тему

    28 апреля

  • Выбор первого дистрибутива Linux: Пособие для начинающих
  • Обфускация и защита программных продуктов
  • Анализ и оптимизация циклов с помощью производящих функций
  • Стратегии объектно-реляционного отображения: систематизация и анализ на основе паттернов

    26 апреля

  • Business Intelligence обещает значительный рост в 2005 году
  • Десять основных тенденций 2005 года в области Business Intelligence и Хранилищ данных
  • Управление эффективностью бизнеса и предсказуемость
  • Увеличение эффективности бизнеса: пять ошибок управления, которых следует избегать
  • Потребность в организационных данных: модель комплексного управления эффективностью бизнеса
  • Технология Хранилищ данных для государственных учреждений
  • Оцените, насколько совершенно ваше Хранилище данных

    21 апреля

  • Исполнение моделей при помощи виртуальной машины
  • Параллельные алгоритмы компьютерной алгебры
  • От стандарта до стандарта (о стандартизации оптических разъемов)
  • За штурвалом IP-станции

    Продолжение дискуссии читателей:

  • Линукс и пользователи, или что мне не нравится в Linux
  • Еще один взгляд на альтернативные ОС (и софт для них)
  • О некомпетентности пользователя Windows
  • Переписка Долгачева В.С. и Монахова В.В.

    19 апреля

  • Межпротокольный шлюз NAT-PT с функциями DNS-ALG и FTP-ALG для обеспечения взаимодействия между сетями IPv4 и IPv6
  • Рефакторинг архитектуры программного обеспечения: выделение слоев
  • Комбинаторика слов и построение тестовых последовательностей
  • Функциональное тестирование Web-приложений на основе технологии UniTesK

    14 апреля

  • Как организовать двойную парольную защиту данных в Oracle
  • Деревянный интерфейс

    Продолжение дискуссии читателей:

  • Microsoft против мира
  • Впечатления от прочитанного

    12 апреля

  • Крупные проблемы и текущие задачи исследований в области баз данных
  • Глава 2 из книги Т.Кайта "Oracle для профессионалов"Архитектура

    Дискуссия читателей о Linux и Windows:

  • Деньги правят миром, и у кого их больше, тот и прав!
  • О злокозненности некомпетентных пользователей, или почему я не люблю ограниченных пользователей Windows

    7 апреля

  • О доблести Билла Гейтса, или почему Windows лучше, чем LINUX или Mac OS
  • Витая пара - все ли так просто?!
  • Выбираем сервер печати
  • Один слой хорошо, а два - лучше (о пишущих DVD-приводах)

    5 апреля

  • Использование Caché SQL Gateway
  • Глава 19 из книги Т.Кайта "Oracle для профессионалов"Хранимые процедуры на языке Java
  • Что такое PostgreSQL?
  • Обновлен PostgreSQL FAQ

    31 марта

  • Использование Веб-сервисов в Caché
  • Защита на уровне строк (Oracle)
  • Секции в реальном мире

    29 марта

  • Разработка успешных приложений для Oracle - первая глава из книги Тома Кайта "Oracle для профессионалов"
  • Web-сервисы: растущие опасения (мнение аналитиков IDC)
  • Технология OLAP - мощная альтернатива электронным таблицам
  • Какой модной стала подготовка отчетности

    24 марта

  • Многоверсионность данных и управление параллельными транзакциями
  • Исключение из правил. Опыт разработки и внедрения финансовой корпоративной системы
  • Обнаружение компрометаций ядра Linux с помощью gdb
  • Корпоративная сервисная шина - "бюджетный" подход к решению задач интеграции
  • Сервис-ориентированная архитектура
  • Бизнес-процессы и XML

    22 марта

  • Доступно. И точка! (обзор точек беспроводного доступа)
  • Коммутаторы Fast/Gigabit Ethernet для "большой" сети
  • Push to Talk: нажми на кнопку и ...говори
  • Сети нового поколения и технология softswitch

    17 марта

  • Часто задаваемые вопросы о proxy (proxy FAQ)
  • Самонастраивающаяся база данных: управляемые приложения и настройка SQL
  • Еще раз о волоконных трассах
  • Настраиваем русский Unicode в FreeBSD-5.3.

    10 марта

  • Еще не сказанное о волоконной оптике
  • Wi-Fi на службе оператора
  • Пора менять платформу?
    (о сокетах LGA775 и PGA478)

    Oracle:

  • Детальный аудит для практических целей
  • Шифруем свои ресурсы данных

    3 марта

  • Требования к проекту. Классификация - первый шаг к пониманию
  • Gtk vs. Qt: драки не будет
  • Управление бизнесом "по максимуму": BPM для финансовых учреждений
  • Реализация решения по управлению эффективностью бизнеса
  • Новые SerialATA-винчестеры
  • Карман для сервера

    1 марта

  • Выбрать корпус - нет ничего проще?
  • Создание виртуальной сети с удаленной загрузкой узлов
  • Текущее состояние и перспективы развития рынка интеграционных технологий
  • Интеграция корпоративной информации: новое направление
  • Архитектурные подходы к консолидации

    24 февраля

  • Каждому проекту своя методология
  • Императив интеграции
  • Безопасность IP-телефонии - полевые зарисовки
  • О злокозненности Билла Гейтса, или почему я не люблю Windows

    22 февраля

  • Oracle10: шифруем данные
  • В версии Oracle10 "виртуальные частные базы данных" данных стали избирательнее
  • Каждому (пользователю) свое (данное в таблице)
    Часть 1
    Часть 2
  • Ускоряем интернет
  • Сетевая аутентификация на практике
  • В фокусе Microsoft Virtual Server 2005

    17 февраля

    Открыт новый раздел
    Все об Open Source

    Все новости >>>



  • IT-консалтинг Software Engineering Программирование Open Source СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы - pr@citforum.ru, тел. +7 095 4119920 Пресс-релизы - manager@citforum.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2004 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...