Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Формуляри web






Вступ

Сучасні операційні системи підтримують багатопотоковий режим, в якому програміст в межах кожного процесу може створювати декілька підпроцесів або потоків. Потоки відрізняються від процесів. В системі з малою кількістю потоків є самостійні процеси і зв’язані процеси, які спільно використовують програми опрацювання відкритих файлів. В багатопотоковій системі кожен процес складається з одного чи більше (до n) потоків, і всі вони спільно використовують як глобальні змінні, так і програми опрацювання відкритих файлів. Таке розділення глобальних змінних спрощує для потоків спільне використання ресурсів при одночасному виконанні поставлених їм задач.

1. приклад динамічного сайту


{

ap.a, ap.b, ap.a + ap.b);

}

}

//текст головної програми містить делегата ParameterizedThreadStart

static void Main(string[] args)

{

Console.WriteLine(" ** Adding with Thread objects **");

Console.WriteLine(" ID of thread in Main(): {0}",

Thread.CurrentThread.GetHashCode());

// Створення об’єкту для потоку

AddParams ap = new AddParams(10, 10);

// Створення потоку через створення делегата з передачею метода

Thread t = new Thread(new ParameterizedThreadStart(Add));

// стартуванння потоку з передачею параметра ap

t.Start(ap);

...

}

}

Потоки є механізмом створення неперервних та конкуруючих процесів. Якщо у попередньому класі Printer введемо в методі друку PrintNumbers() затримку випадкової тривалості, то процес потоку, в якому виконується метод, буде затримуватись. Якщо потоків буде декілька, вони будуть конкурувати між собою за доступ до друку.

public class Printer

{

public void PrintNumbers()

{

...

for (int i = 0; i < 10; i++)

{

Random r = new Random();

Thread.Sleep(1000 * r.Next(5));

Console.Write(i + ", ");

}

Console.WriteLine();

}

}

Головна програма формує конкуруючі потоки:

class Program

{

static void Main(string[] args)

{

Console.WriteLine(" *****Synchronizing Threads *****\n");

Printer p = new Printer();

// Створити 10 потоків з одним методом одного об’єкту

Thread[] threads = new Thread[10];

for (int i = 0; i < 10; i++)

{

threads[i] =

new Thread(new ThreadStart(p.PrintNumbers));

threads[i].Name = string.Format(" Worker thread #{0}", i);

}

/ / Стартувати всі наявні потоки

foreach (Thread t in threads)

t.Start();

Console.ReadLine();

}

Наведені потоки можуть належати до:

· переднього плану - програма не закривається поки не завершаться всі її потоки переднього плану;

· заднього плану(daemon threads) - потоки автоматично знищуються при розвантаженні програмної області (властивість IsBackground=true).

2. Вказівки до виконання роботи

Ознайомитись з механізмом потоків. Скласти алгоритм простого потоку.. Запустити потік. Ускладнити задачу з нарощеннням кількості потоків.

3. Послідовність виконання роботи

1. Розробити механізм потоку;

2. Спроектувати клас потоку для задачі малюванння та переміщення об'єктів;

3. Формалізувати алгоритм. Розробити структури даних;

4. Створити візуальні структури.

4.Завдання до лабораторної роботи

1. Створити C# програму декілька кульок, що рухаються на площині.

2. Створити C# потоки видруку різних слів.

3. Створити C# потоки декількох годиннніків.

4. Створити клас потоку TicTac, який в методі run містить цикл виводу слова (першого параметра конструктора) і робить затримку на час, що задається другим параметром конструктора. Запустити 2-3 потоки з різними словами та затримками. Проаналізувати результати.

5. Створити клас потоку Movie, який в методі runмістить код малювання ліній, фігур, зображень з файлу тощо. Вхідними параметрами потоку встановити координати центру, час затримки або інші атрибути малюнків. Запустити декілька потоків щоб їх робота відображала рух об’кта по екрану.

6. Створити клас потоку Ways, який в методі runмістить код знаходження шляхів в графі від заданої початкової до деякої кінцевої та малювання послідовності включення ребер графу у шлях. Граф є спільний для двох потоків. Номери початкових та кінцевих вершин – параметри конструктора. Використати методи малювання ліній. Запустити два потоки з протилежних вершин графу

7. Створити C# програму: формування графів.

8..Створити C# програму введення та перетворенння даних.

9. Створити C# програму генерацій та опрацювання псевдо випадкових послідовностей

5. Контрольні питання

1. Для чого використовуються потоки?

2. Які є механізми потоків?

3. Основний метод потоку?

4. Властивості потоків?

1. Вказати основні принципи побудови платформи.NET.

2. Вказати головні компоненти платформи.NET.

3. Який механізм використовується в платформі для зв’язування різномовних програм?

4. Зобразити графічно складові середовища програмування.

5. Пояснити призначення інструментів середовища програмування.

6. Пояснити склад збірки в платформі.NET.

7. Пояснити функції редактора текстів.

8. Які і для яких цілей призначені вікна середовища VS?

9. На які групи можна поділити класи та інтерфейси платформи.NET?

10. Чим платформа.NET відрізняється від традиційного програмування для С++?

11. На противагу якій платформі компанія MS розробила платформу.NET і чому?

Лабораторна робота №2

Тема: створення баз даних за допомогою стандартних бібліотек C#.

Мета: навчитись елементам програмування мовою C#. Засвоїти основні стандартні класи і методи бібліотек sql та swing, та бібліотек, що дозволяють опрацьовувати дані СУБД.

Вступ

Для створення незалежних від платформи клієнт-серверних програм з використанням баз даних використовується інтерфейс C# для баз даних ADO.NET. Рис.1

1.Архітектура ADO.NET

Складовою частиною платформи.NET для забезпечення доступу до СУБД є засоби ADO.NET - зібрання класів, інтерфейсів, структур та типів, що дозволяють реалізувати доступ до даних. ЇЇ можна розглядати як покращена версія ADO.

ADO.NET об’єднує можливості ADO та OLE DB в єдиній системі управління послугами доступу до даних (рис.7.2). Кожна послуга містить класи для реалізації інтерфейсу до різних джерел даних. Наприклад, ADO Managed Provider (до джерел даних OLE DB), SQL Server Managed Provider (доступ до DBMS Microsoft), Exchange Managed Provider (дані з Microsoft Exchange) тощо. ADO.NET підтримує використання документів в у XML форматі. Це спрощує доступ до даних за протоколом HTTP.

 

 
 

 

 


Рис.7.2. Доступ до баз даних через ADO.NET

ADO.NET є технологією доступу до баз даних у платформі.NET (Dot Net), яка базується на технології Microsoft ActiveX® Data Objects (ADO). ADO є незалежною від мови програмування технологією об’єктних моделей. ADO.NET є інтегральною частиною засобів.NET Compact Framework і підтримує доступ до реляційних баз даних, до XML документів та даних програм. На її основі можна розробити як клієнтські так і серверні частини проектів широкого спектру задач.

Основні класи та інтерфейси ADO.NET наведені в наступній таблиці:

Об’єкти Базові класи Інтерфейси Призначення
Connection DbConnection IDbConnection Відкриття та закриття з’єднання до джерел даних
Command DbCommand IDbCommand Команди SQL запитів та назви процедур
DataReader DbDataReader IDataReader Доступ до читання (тільки) даних
DataAdapter DbDataAdapter IDataAdapter Посередник між користувачем та місцем зберігання даних. Містить 4 об’єкти команд (select, insert, update, delete)
Parameter DbParameter IDataParameter, Параметри для запитів  
Transaction DbTransaction IDbTransaction Здійснення транзакцій

.

ADO.NET визначає ряд інтерфейсів, які пропонують базову функційність доступу до джерел даних. Реалізація інтерфейсів на основі методів і властивостей створює конкретні програмні засоби доступу до джерел даних:

Інтерфейс IDbConnection – встановлює сесію з джерелом даних. Дозволяє відкривати та закривати з’єднання, починати та завершати трансакції (методи Commit та Rollback. Класи SqlDbConnection та OleDbConnection реалізують інтерфейс IDbConnection.

Інтерфейс IDbCommand представляє команди, що надсилаються до джерела даних (як правило, в SQL). Класи SqlDbCommand та OleDbCommand реалізують інтерфейс IDbCommand.

Інтерфейс IDataReader описує доступ до джерел даних для читання. Класи SqlDataReader та OleDbDataReader реалізують інтерфейс IDataReader. Метод ExecuteReader повертає групу стовців, а метод ExecuteScalar повертає єдине значення, метод ExecuteNonQuery не повертає нічого (знищення та відновлення).

Інтерфейс IDataAdapter реалізований у класах OleDbDataAdapter та SqlDataAdapter використовується для побудови групи даних. З ними працюють у асинхронному режимі, коли не підтримується відкритим з’єднання з базою даних. Тут можна реалізувати операції вибірки (select), вставки (insert), оновлення (update) та знищення (delete).

В ADO.NET межі транзакцій вказують програмістом. Об’єкти класу Connection мають метод BeginTransaction, який повертає трансакцію (об’єкт типу Transaction). Трансакція виконується при виклиці методу Commit та переривається методомчи Rollback об’єкту Transaction повернутого методом BeginTransaction.

ADO.NET має дві форми доступу до даних:

Доступ без з’єднання: Програма виконує запит і розміщує результати виконання запиту в об’єкті типу DataSet, щоб пізніше їх перенести в задані масиви тощо. В цьому випадку мінімізується час підтримки відкритого з’єднання до бази даних.

Доступ через з’єднання: читання з безадресним курсором (" firehose cursors"). Програма здійснює запит і читає дані з допомогою об’єкту DataReader.

ADO.NET визначає об’єкти типу DataSet та DataTable, які оптимізують перенесення даних по мережах інтранету та Інтернету (в т.ч. крізь firewalls). Технологія надає також традиційні об’єкти Connection і Command.

З допомогою ADO.NET та.NET Framework можна організувати доступ до наступних джерел даних:

· SQL Server (System.Data.SqlClient).

· OLEDB (System.Data.OleDb).

· ODBC (System.Data.Odbc).

· Oracle (System.Data.OracleClient).

Двома основними компонентами в ADO.NET є класи: DataSet, та. NET Framework Data Provider(рис.7.3).

Компонента джерела даних ( Data Provider ) за призначенням подібна до диспетчерів ODBC чи JDBC та включає наступні об’єкти:

· Connection(SqlConnection, OleDbConnection, OdbcConnection, OracleConnection);

· Command(SqlCommand, OleDbCommand, OdbcCommand, OracleCommand) - SQL запити для роботи з даними баз даних: select, insert, delete та update;

· DataReader(SqlDataReader, OleDbDataReader, OdbcDataReader, OracleDataReader) - для читання даних великих об’ємів, що не розміщуються в пам’яті, DataAdapter використовує його для з’єднання з базою даних;

· DataAdapter(SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter, OracleDataAdapter) - для з’єднання з базою даних контейнера даних.

Об’єкт DataSet - компонента, що містить результати запиту (містить ряд таблиць). За характером подібний до роз’єднаного кешу даних - місця в пам’яті. Складовими частинами якого є об’єкти DataTables та DataRelations (форма для встановлення зв’язків між таблицями) – зберігають результати виконання команд. DataAdapter - служить зв’язком між контейнером даних DataSet та джерелом (базою) даних Data Provider.

 

 

Етапи функціонування ADO.NET є наступні:

1. Створення об’єкту Connection з вказуванням для нього параметрів з’єднання.

2. Створення DataAdapter.

3. Створення об’єкту Command, асоційованого з DataAdapter.

4. Відкриття DataSet для розміщення даних.

5. Відкриття з’єднання.

6. Наповненння DataSet даними з допомогою DataAdapter.

7. Закриття з’єднання.

8. Опрацювання даних, що зберігаються в DataSet.

В залежності від СУБД, що виступає джерелом даних, до програми залучаються наступні бібліотеки класів (простори назв):

// СУБД MS Accessusing System.Data.OleDb;

//СУБД MS SQL Server

using System.Data.SqlClient;

Для підключення до відповідної бази даних конструктор об’єкту Connection вимагає параметрів, які вказують на комп’ютер джерела даних (сервер, ІР –адреса тощо), шлях до каталога з базою даних, спосіб забезпечення безпеки передачі (SSPI), ім’я користувача, зареєстрованого в СУБД, а також відповідний пароль.

Наприклад, необхідно вказати назву бази даних СУБД MS Access для під’єднання до " PersonDatabase.mdb " включно зі шляхом до файлів:

public string conString=@" Provider=Microsoft.Jet.OLEDB.4.0; " + @" DataSource=..\\..\\PersonDatabase.mdb";

Конструктором з параметром – рядком адреси створюється об’єкт для відкриття з’єднання з СУБД:

...... OleDbConnection con = new OleDbConnection(conString); // відкрити з’єднання з СУБД con.Open();

......

Відкриття з’єданння займає певні ресурси сервера, які він розділяє між всіма користувачами, що мають доступ до його даних. Тому при написанні вищезазначених операцій слід користуватись правилами:

· Відкривати з’єднання тільки при необхідності, тобто перед безпосередніми операціями маніпуляцій з даними;

· Закривати з’єднання відразу після завершення операцій доступу.

Наведемо фрагмент програми доступу до MySQL сервера, що має команди створення об’єкту, відкриття з’єднання, формування та виконання SQL-запиту, закриття з’єднання та опрацювання виняткових ситуацій:

............ private SqlConnection con = null; private string constr =" Integrated Security=SSPI; " + " Initial Catalog=Northwind; " + " Data Source=SONY\\MYSQLSERVER; "; private void fnGetConnection() { try {// під’єднанняcon = new SqlConnection(constr);

con.Open();

// формування та виконання SQL запиту

string sqlInsert = " INSERT INTO

Department(DepartmentName) VALUES (@DepartmentName)";

SqlCommand insertCommand = new SqlCommand(sqlInsert, con);

SqlParameter param = insertCommand.Parameters.Add (

new SqlParameter(" @DepartmentName", SqlDbType.VarChar, 100));

param.Value = “Arsen”;

} catch (Exception ex) { MessageBox.Show(" Error in connection: " +ex.Message); } finally { // закрити з’єднання if (con! = null) con.Close(); } //кінець блоку finally } }

 

При розміщенні даних у пам’яті і роботі з ними (внесення змін, знищення чи поновлення) без з’єднання методи Update (DataAdapter), AcceptChanges (DataSet) та RejectChanges служать для фіксації чи заборони проведення змін в базах даних.

Клас DataSet забезпечує доступ до даних без з’єднання. Він містить копію прочитаних даних, яка завантажуються у системі клієнта.

Об’єкт DataSet складається з двох об’єктів (рис.7.4):

· DataTable - містить null або багато об’єктів типу DataTable (Columns, Rows, Constraints);

· DataRelation - містить null або багато об’єктів типу DataRelation, між якими встановлені відношення батьки/діти для пари об’єктів типу DataTable.

Об’єкт DataSet інкапсулює таблиці і підтримує відношення між ними. Зміст DataSet можна серіалізувати (представити послідовністю символів) у форматі XML. У ньому можливо проводити динамічні зміни даних та метаданих.

 

 

Клас DataTable представляє таблиці у пам’яті. Схема таблиці описується через стовпці Columns. Цілісність даних забезпечується об’єктами забезпечення обмежень (Constraint), які містять події на реакції операцій над таблицею.

Клас DataColumn призначений для опису стовпців на основі властивості DataType і включає обмеження Constraints та відношення Relations. Володіє властивостями AllowNull, Unique та ReadOnly.

Клас DataRow описує дані рядка таблиці (розміщені в колекції Rows об’єкта DataTable.

Клас DataRelation пов’язує DataTables з DataColumns та призначений для підтримки обмежень на цілісність. Для доступу до даних, пов’язаних з конкретним записом треба виконати метод GetChildRecords з відповідного стовпця DataRow.

Розглянемо фрагменти коду для створення таблиць, стовпців та первинних ключів у базі даних, що на рис 7.5:

 

DataTable authors = new DataTable(" Author");

DataTable books = new DataTable(" Book");

 

DataColumn id = authors.Columns.Add(" ID", typeof(Int32));

DataColumn name = new authors.Columns.Add(" Name", typeof(String));

authors.PrimaryKey = new DataColumn[] {id};

id.AutoIncrement = true;

 

DataColumn isbn = books.Columns.Add(" ISBN", typeof(String));

DataColumn title = books.Columns.Add(" Title", typeof(String));

DataColumn authid = books.Columns.Add(“AuthID”, typeof(Int32));

books.PrimaryKey = new DataColumn[] {isbn};

 

DataColumn[] secondkey = new DataColumn[] {authid};

DataRelation bookauth = new DataRelation(" BookAuthors",

authors.PrimaryKey, secondkey);

 

На основі створених об’єктів таблиць формується об’єкт DataSet:

DataSet dataset = new DataSet();

dataset.DataSetName = " BookAuthors";

dataset.Tables.Add (authors);

dataset.Tables.Add (books);

dataset.Relations.Add (bookauth);

 

Наступним фрагментом вносяться дані у відповідні поля таблиці:

 

DataRow shkspr = authors.NewRow();

shkspr[" Name" ] = " William Shakespeare";

authors.Rows.Add(shkspr);

 

DataRow row = books.NewRow();

row[" AuthID" ] = shkspr[" ID" ];

row[" ISBN" ] = " 1000-XYZ";

row[" Title" ] = " MacBeth";

books.Rows.Add(row);

// Виконати внесені зміни

dataset.AcceptChanges();

Можливі два типи класу DataSet: Типізовані та не типізовані. Перші утворюються з базового класу DataSet та для генерації нового класу використовують інформацію з XML схемних файлів (.xsd file). Ця інформація (таблиці, стовпці тощо) генерується та компілюється в новий клас DataSet як ряд об’єтів та властивостей першого класу. Типізовані класи підтримуються засобами IntelliSense у редакторі середовища Visual Studio.

Наступний приклад ілюструє доступ до першого рядка стовпця CustomerID в таблиці Customers: DataSet dset = new DataSet(); string str; str=dset.Customers[0].CustomerID;

Для створення типізованого DataSet необхідно

· Викликати командний prompt (cmd) на місці розташування схемного XSD файлу;

· Виконати утиліту XSD.EXE для створення типізованого класу DataSet:

xsd.exe /d /l: cs mydataset.xsd /n: mynamespace Параметри вказують /d: створити DataSet. /l: cs – встановити мову C#. /n: mynamespace – простір назв " mynamespace" для класу.

Результатом роботи XSD.EXE з даними аргументами буде файл .cs класу (mydataset.cs).

Для компіляції класу треба застосувати csc.exe:

csc.exe /t: library mydataset.cs /r: System.dll /r: System.Data.dll /r: System.XML.dll /out: bin/mydataset.dll /t: library

Компіляція створить бібліотечну компоненті типу DLL, а параметри вказують:

· /r: - на збірку, на яку формується посилання;

· /out: - на місце зберігання - підкаталого bin поточного каталога.

Нетипізований клас DataSet не визначається схемою, а формується програмно на основі таблиць та їх елементів.

Для нетипізованого типу DataSe t наведений вище код еквівалентний наступному:

DataSet dset = new DataSet(); string str; str=(string)dset.Tables[" Customers" ].Row[0].[" CustomerID" ];

Об’єкт DataSet є контейнером, який можна наповнювати даними різними способаи:

1. За допомого об’єкту DataAdapter та його методу Fill:

string strCon = @" Data Source=SONY\MYSQLSERVER; " + " Initial Catalog=Northwind; Integrated Security=SSPI"; string strSql=" select * from customers"; SqlConnection con=new SqlConnection(strCon); con.Open(); //створення об’єкту DataAdapter SqlDataAdapter dadapter=new SqlDataAdapter(); dadapter.SelectCommand=new SqlCommand(strSql, con); DataSet dset=new DataSet(); dadapter.Fill(dset); con.Close(); //прив’язування даних та таблиці this.dataGrid1.DataSource=dset;

2. Створення програмно об’єктів DataTable, DataColumn та DataRow:

DataSet dset; DataTable dtbl; DataRow drow; //створити рядок drow=dtbl.NewRow(); //за назвою поля або індексом занести даніdrow[" LastName" ]=" Altindag"; drow[1]=" Altindag"; //додати новий рядок методом Add до DataRow dtbl.Rows.Add(drow); //або додати рядок методом Add через масив типу Objectdtbl.Rows.Add(new object[] {1, " Altindag" });

3. Перенести XML документ чи потік в DataSet:

З бази даних Pubs SQL-запитом отримуються дані таблиці Authors у вигляді XML-документу і створюється об’єкт типу SqlCommand. Після створення об’єкту типу DataSet, метод ExecuteXmlReader передає дані об’єкту DataSet методом ReadXml.

Далі встановлюється властивість DocumentContent методом GetXml об’єкту DataSet. Для виведення документу використовується документ XSL Transformation (файл authors.xsl включений в проект).:

protected System.Web.UI.WebControls.Xml XmlDisplay; string strCon = @" Data Source=SONY\MYSQLSERVER; " +" Initial Catalog=pubs; Integrated Security=SSPI"; SqlConnection con=new SqlConnection(strCon); con.Open(); try{ string strSql=" select * from FROM authors FOR XML AUTO, XMLDATA"; SqlCommand cmd=new SqlCommand(strSql, con); DataSet dset=new DataSet(); dset.ReadXml(cmd.ExecuteXmlReader(), XmlReadMode.Fragment); XmlDisplay.DocumentContent = dset.GetXml(); } finally { con.Close(); }

4. Об’єднанням (копіюванням) змісту іншого об’єкту DataSet методом Merge: якщо два об’єкти DataSet мають подібні схеми, то можна в один з них зкопіювати інший, в якому, наприклад, були проведені певні зміни:

dataset1.Merge(dataset2);

2. Послідовність виконання роботи

1. Написати фрагменти програм доступу до СУБД, 2. Написати фрагменти формування запитів, отримання таблиць – результатів запитів. 3. Скласти проект системи формування бажаних таблиць для кожного клієнта.

3. Завдання до лабораторної роботи

1.Створити базу даних, що містить декілька таблиць.

2. Запрограмувати доповнення записів даних в таблицях.,

3. Запрограмувати видалення записів даних.

4. Запрограмувати фільтрацію даних.

5. Написати фрагменти програм доступу до СУБД, формуваннязапитів, отримання таблиць –результатів запитів, перенесення результатів

4. Контрольні питання

1. 1. Що є база даних, а що таблиця даних? Які функції покладені драйвер та диспетчера СУБД? Як здійснити доступ до СУБД різних виробників?

2. Які особливості доступу до баз даних в платформі.NET?

3. Мова SQL, її призначення та складові частини? Як формується запит у мові програмування.NET?

4. Які об’єкти можна утворити методами класу DataAdapter?

5. Які об’єкти можна утворити методами класу Command?

6. Які методи класу Connection найчастіше використовуються програмістом?

7. Яким іструментарієм повинен володіти програміст для реалізації віддаленого доступу до баз даних.NET?

8. Як клас DataSet зберігає таблиці?

9. Які функції класу DataReader?

10. Які положення ASP.NET повинен знати програміст, щоб проектувати та програмувати виведення результатів з баз даних?

11. В чому полягає модульність програм доступу до баз даних?

12. Чому при доступі до баз даних необхідно використовувати блок try? 13. Як пов’язати об’єкти отримані в результаті реалізації запитів та сторінками, які формуються для відсилання до клієнта?

Лабораторна робота №3

Тема: створення клієнт/серверних програм за допомогою бібліотек C#.

Мета: навчитись концепціям програмування мовою C#, а також засвоїти основні стандартні класи і методи бібліотеки net.

1. Програмування клієнтів та серверів за протоколом TCP/IP

Розглянемо класи простору назв System.Net, на базі яких розробляються програми сервера та клієнта для спілкування між собою на основі TCP та UDP протоколів. В протоколі TCP/IP кожний комп’ютер ідентифікується цілим числом довжиною в чотири байти – IP-адресою (наприклад, форматованим як 192.168.0.101). Для кращого запам’ятовування ця IP-адреса прив’язується до назви вузлового комп’ютера -хоста.

Створення сервера чи клієнта пов’язане з формуванням об’єкту сокету для прийняття запитів та надсилання відповідей. Для формування сокета необхідно знати IP-адресу комп’ютера, на якому виконується сервер, та номер TCP – порту. Для визначенння IP-адреси за назвою хоста використовується клас DNS для сполучення з DNS-сервером. Відповідні команди записуються наступним чином:

..............

// DNS: за назвою хосту визначення IP-адреси

IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());

IPAddress ipAddress = ipHostInfo.AddressList[0];

// створення об’єкту порт+ IP-адреса

IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

..............

В цьому фрагменті присутні класи IPHostEntry, IPAddress – певні структури даних, методи яких дозволяють отимати їх властивості, а саме:

- Dns.GetHostName()- повертає назву комп’ютера,

- Dns.Resolve() - повертає об’єкт IPHostEntry інформації щодо комп’ютера з заданою назвою, в тому числі AddressList – властивість, для повернення IP-адреси комп’ютера (типу IPAdress). Метод Resolve() генерує виняткову ситуацію, якщо хост не знайдено.

Наведена нижче програма використовує клас System.Net.Dns для висвітлення IP адреси комп’ютера, назва якого передається як аргумент з командного рядка. При відсутності аргументу висвітлюється назва та IP адреса локальної станції.

using System;

using System.Net;

class ShowIP

{

public static void Main(string[] args){

string name = (args.Length < 1)? Dns.GetHostName(): args[0];

try{

IPAddress[] addrs = Dns.Resolve(name).AddressList;

foreach(IPAddress addr in addrs)

Console.WriteLine(" {0}/{1}", name, addr);

}

catch(Exception e)

{

Console.WriteLine(e.Message);

}

}

}

В протоколі TCP/IP кожна мережна програма характеризується номером (ціле, 2 байти) свого логічного порту, що ідентифікує програму та функції, які вона реалізує. Передача даних здійснюється в так званих IP - пакетах або данограмах. Розмір кожної данограми становить 64 KByte і він містить дані, довжину даних, IP-адреси та номери портів відправника та одержувача. Відправлена данограма фізично досягає всі інші комп’ютери мережі, але приймається тим комп’ютером, чия IP –адреса позначена в датограмі. Далі пакет передається програмі, що прослуховує відповідний номер порту.

TCP (Transmission Control Protocol) є надійним протоколо для з’єднаннь, а UDP(User Datagram Protocol) є швидким і ненадійним протоколом (без з’єднання).

Для протоколу TCP є різниця між процесами на сервері на клієнті. Процес сервера стартує та прослуховує певний визначений номер порту (відомий клієнтові). Процес клієнта стартує для підготовки запиту на довільний номер порту.

Клієнт. Створення програми клієнта можна здійснити двома способами: на основі класу Socket або на основі класу TcpClient.

У першому випадку основні операції пов’язані з створення сокетів та об’єктів для введення/виведення даних. Фрагменти кодів програми для реалізації вказаних операцій наведені нижче:

Розглянемо фрагменти програми для створення TCP – клієнта для з’єднання з сервером:

.......

string message = " Greetings... < FIN> ";

string response;

Byte[] SendBytes = Encoding.ASCII.GetBytes(message);

Byte[] RecvBytes = new Byte[256];

int bytes;

// визначення адреси сервера

IPAddress address = Dns.Resolve(" localhost").AddressList[0];

// встановлення порту

IPEndPoint EPhost = new IPEndPoint(address, 11000);

// формуваннняоб’єкту Socket

Socket socket = new Socket (AddressFamily.InterNetwork,

SocketType.Stream,

ProtocolType.Tcp);

// З’єднання з сервером

try {

socket.Connect (EPhost);

// пересилання ти приймання даних

socket.Send(SendBytes,

SendBytes.Length,

SocketFlags.None);

bytes = socket.Receive (RecvBytes,

RecvBytes.Length,

SocketFlags.None);

response = Encoding.ASCII.GetString

(RecvBytes, 0, bytes);

while (bytes > 0) {

bytes = socket.Receive (RecvBytes,

RecvBytes.Length,

SocketFlags.None);

response += Encoding.ASCII.GetString

(RecvBytes, 0, bytes);

}

Console.WriteLine(response);

} catch (Exception error) {

Console.WriteLine(" ERROR - " +error);

}

...............

При використанні класу TcpClient створення клієнта здійснюється етапами:

1) Створити об’єкт System.Net.Sockets.TcpClient з допомогою конструктора та параметрів: на основі параметрів (назви хоста сервера та порта);

2) Створити об’єкт потоку даних, прив’язаного до об’єкту TcpClient;

4) Здійснити операції обміну;

5) Закрити потік Stream та TcpClient.

Нижче наведено приклад програми клієнта для спілкування з сервером EmployeeTCPServer:

using System;

using System.IO;

using System.Net.Sockets;

class EmployeeTCPClient

{

public static void Main(string[] args){

TcpClient client = new TcpClient(args[0], 2055);

try{

// створення потоків читання та запису

Stream s = client.GetStream();

StreamReader sr = new StreamReader(s);

StreamWriter sw = new StreamWriter(s);

sw.AutoFlush = true;

Console.WriteLine(sr.ReadLine());

while(true){

Console.Write(" Name: ");

string name = Console.ReadLine();

sw.WriteLine(name);

if(name == " ") break;

Console.WriteLine(sr.ReadLine());

}

s.Close();

}finally{

// Код виконується завжди

client.Close();

}

}

}

Сервер. Програма сервера також створюється двома способами: на основі класу Socket та класу TCPListener. В першому способі для створення сокета використовуємо конструктор з відповідними параметрами. Сокет своїми методами Bind() та Listen() переводиться у стан прослуховування гнізда та очікування на отримання даних:

......................

Socket listener = new Socket (AddressFamily.InterNetwork,

SocketType.Stream,

ProtocolType.Tcp);

listener.Bind(localEndPoint);

listener.Listen(100);

Socket handler = listener.Accept();

...........

Метод Accept приймає перший запит і створює новий сокет, який можна використати для зв’язку з клієнтом.

Після створення нового сокету можна виконувати прийом та відсилання даних сервером:

...........

byte[] bytes = new byte[1024];

int count;

String data = " ";

do

{

// отримання та надсилання даних

count = handler.Receive(bytes);

data += System.Text.Encoding.ASCII.GetString(bytes, 0, count);

} while (data.IndexOf(" < FIN> ") == -1);

// ехо-розрук

Console.WriteLine(" Text received: {0}", data);

byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

handler.Send(msg);

handler.Shutdown(SocketShutdown.Both);

handler.Close();

..........

Перевірити правильності функціонування TCP сервера можна утилітою telnet, щоб з’єднатись з портом, асоційованим з сервером:

telnet localhost 11000

При використанні класу TCPListener основні кроки для створення TCP/IP сервера є наступними:

1) Створити об’єкт System.Net.Sockets.TcpListener з заданим локальним портом і стартувати;

2) Очікувати на запит на з’єднання та створити об’єкт Socket;

3) Створити об’єкт потоку даних System.Net.Sockets.NetworkStream, прив’язаного до об’єкту Socket;

4) Здійснити операції обміну;

5) Закрити потік Stream та Socket.

Для прийняття більшого числа запитів від різних клієнтів кроки 2-5 повторяються. Це проілюстровано в наступному прикладі, де генеруються потоки з одним статичним методом Service(). Програма є прикладом створення багатопоточного сервера за протоколом TCP/IP. Сервер приймає назви клієнтів та відсилає види робіт. Клієнт завершує сеанс надсиланням пустого рядка. Дані про роботу беруться з конфігураційного файлу (XML- файлів у каталозі розміщення програми, назва файлу співпадає з назвою програмного файлу, але з розширенням .config).

using System;

using System.Threading;

using System.IO;

using System.Net;

using System.Net.Sockets;

using System.Configuration;

 

class EmployeeTCPServer{

static TcpListener listener;

const int LIMIT = 5; //5 конкуруючих клієнтів

 

public static void Main(){

listener = new TcpListener(2055);

listener.Start();

Console.WriteLine(" Server mounted,

listening to port 2055");

for(int i = 0; i < LIMIT; i++){

Thread t = new Thread(new ThreadStart(Service));

t.Start();

}

}

public static void Service(){

while(true){

Socket soc = listener.AcceptSocket();

Console.WriteLine(" Connected: {0}",

soc.RemoteEndPoint);

try{

Stream s = new NetworkStream(soc);

StreamReader sr = new StreamReader(s);

StreamWriter sw = new StreamWriter(s);

sw.AutoFlush = true; // для автоматичного очищення

sw.WriteLine(" {0} Employees available",

ConfigurationSettings.AppSettings.Count);

while(true){

string name = sr.ReadLine();

if(name == " " || name == null) break;

string job =

ConfigurationSettings.AppSettings[name];

if(job == null) job = " No such employee";

sw.WriteLine(job);

}

s.Close();

} catch(Exception e){

Console.WriteLine(e.Message);

}

Console.WriteLine(" Disconnected: {0}",

soc.RemoteEndPoint);

soc.Close();

}

}

}

Конфігураційний файл (tcpserver.exe.config) для програми сервера має наступний вигляд:

< configuration>

< appSettings>

< add key = " john" value=" manager" />

< add key = " jane" value=" steno" />

< add key = " jim" value=" clerk" />

< add key = " jack" value=" salesman" />

< /appSettings>

< /configuration>

Компіляція здійснюється командою:

csc tcpserver.cs

Запускається сервер командою start tcpserver. Для перевірки програми задаємо telnet localhost 2055.

3. Вказівки до виконання роботи

Розробити сценарій взаємодії двох програм. Вибрати необхідні класи та методи. Вибрати структури даних. Запрограмувати два мережних модуля обміну файлами.

4. Послідовність виконання роботи

1.Розробити механізм читання вхідного файлу та його рзміщенння;

2. Спроектувати структури для зберіганння даних;

3. Формалізувати алгоритм. Вибрати класи та методи для реалізації;

4. Створити візуальні засоби.

5.Завдання до лабораторної роботи

1. Створити клас клієнта.

2. Створити клас сервера.

3. Забезпечити клієнт-серверне з’єднання.

4. Сформулювати ТЗ і специфікації на проектування локальної мережі кафедри, лабораторії тощо. Навести структуру локальної мережі з комп’ютером – сервером. Навести мінімальний та максимальний набори класів, необхідних для виконання мережею своїх функцій

6. Контрольні питання

1. 1. В межах якого протоколу працюють об’єкти класів Socket та TcpClient? TCPListener?

2. Якими головними методами оперує програміст при створенні програм з’єднання комп’ютерів та пересилання даних між ними?

3. Які параметри приймають конструктори класівSocket та TCPListener? Яке логічне та фізичне значення цих параметрів?

4. Створити клас у вигляді потоку для з’єднання двох комп’ютерів. Вони знаходяться в стані очікування без інформації на вході порту, опрацьовують поступлені дані та при необхідності пересилають дані на другий комп’ютер.

5. Які функції покладаються на клас IPAddress? Які типи адресів використовуються при включенні комп’ютера в локальну чи глобальну мережу?

6. Які типи вхідних та вихідних потоків даних використовують функції в класах Socket та TCPListener? Які два способи використовуються при створенні об’єктів потоків даних чи мережевих класів? Від чого це залежить?

7. Як побудувати локальні мережі комп’ютерів, які базуються на класах Socket або TCPListener?

8. Перерахувати можливі типи виняткових ситуацій в програмах при використанні класів Socket, TCPListener та IPAddress? Пояснити природу явищ - причин виняткових ситуацій при роботі комп’ютера в мережі.

Для чого при побудові сервера бажане використання потоків

 

Лабораторна робота №4

Тема роботи: Створенння веб сторінок засобами ASP.NET

Мета роботи: Ознайомитись з класами та методами середовища ASP.NET

 

Формуляри web

Для створення динамічних web-сторінок платформа.NET пропонує простір назв System.Web, який містить класи для створення засобів спілкування між навігатором та web-сервером (запити, відповіді, кукі тощо). Зокрема, похідні простори System.Web.UI, System.Web.UI.HtmlControls, System.Web.UI.WebControls надають різні типи елементів управління для побудови інтерфейсу користувача web-програм.

Web програми ASP.NET формуються на основі web –формулярів, які поділяються на файли типу.aspx (інтерфейс формуляру) та окремий файл коду (логіка програми). Для виконання їх треба помістити у каталог, доступний серверу IIS (наприклад, кореневий каталог wwwroot). Код програми компілюється автоматично і створюється збірка в кеш-пам’яті CLR. Якщо текст сторінки змінюється, то код логіки перекомпільовується автоматично. Якщо текст не змінюється, то запити використовують скомпільовану версію, що розташована в кеші. Цим механізмом підвищується ефективність web-програми з ASP.NET в порівнянні з попередніми версіями ASP.

Розглянемо приклади файлів двох типів:

1).aspx - інтерфейс формуляру

< % @Page Language=" C#" Inherits=" TodayPage" Src=" Today.cs" %>

< html>

< body>

< h1 align=" center" >

Today we have < % OutputDay(); %>

< /h1>

< /body>

< /html>

2) today.cs – текст програми на с#

using System;

using System.Web.UI;

public class TodayPage: Page

{

protected void OutputDay()

{

Response.Write(DateTime.Now.ToString(" D"));

}

}

У файлі.aspx можна помістити код з наперед описаними елементами управління. Сторінка.aspx успадковує клас, визначений у файлі коду, Останній успадковує клас System.Web.UI.Page (рис. 6.4). Методи класу позначаються як protected для дозволу доступу до них з файлу.aspx.

 

 

В ширшому сенсі при побудові web-програм на основі ASP.NET проект містить крім двох названих типів (сторінки.aspx і коду логіки.cs) файлів конфігураційний файл web.config, файл видачі результатів аутентифікації login.aspx, файл аутентифікації login.aspx.сs (написані на певній мові програмування) та певних зовнішніх ресурсів (картинки, аудіо тощо).

6.3. Елементи управління web-сторінки

6.3.1. Типи елементів управлінння

 

Програми повинні містити коди відповідей на кожну подію, генерову інтерфейсом при доступі до елементів керування ASP.NET. Web-сервер інтерпретує етикетки та генерує відповідні візуальні елементи з допомогою HTML-коду.

Вирізняють три типи елементів управління ASP.NET:

· елементи управління HTML (традиційні HTML теги);

· web- елементи управління (етикетки ASP.NET);

· елементи управління перевірки цілості та наявності даних.

Елементи управління HTML т рактуються сервером як текст і надсилаються до клієнта. Щоб зробити їх програмованими треба використати атрибут runat=" server".

У Visual Studio.NET можна використовувати елементи управління HTML вказавши відповідну опцію меню при проектуванні web-формуляру " виконувати як елемент управління сервера". Додатково ASP.NET вимагає, щоб всі елементи HTML були акуратно відкриті та закриті (як у XML-документах).

Всі елементи управління сторінки ASP.NET мусять міститися в межах тегу < form> з атрибутом runat=" server":

< form runat=" server" >

... елементи HTML та елементи ASP.NET...

< /form>

Наступний приклад демонструє, як HTML посиланнями (HtmlAnchor) можна динамічно завантажити сторінку з відповідною URL адресою. Для цього треба присвоїти відповідне значення властивості HRef у коді опрацювання події, яка відбудеться на сторінці ASP.NET:

На сторінці ASP.NET маємо файл HTMLConrol.aspx:

< html>

...

< body>

< form id=" HTMLControl" method=" post" runat=" server" >

< a id=" link" runat=" server" > Visit our page! < /a>

< /form>

< /body>

< html>

 

У наведеному файлі елементи HTMLControl та link є змінними файлу HTMLConrol.cs, з якими працюватиме сервер. Цей файл коду реакції HTMLConrol.cs при завантаженні сторінки має вигляд:

public class HTMLControl: System.Web.UI.Page

{

protected System.Web.UI.HtmlControls.HtmlAnchor link;

private void Page_Load(object sender, System.EventArgs e)

{

link.HRef = " https://daily.lviv.ua/";

}

override protected void OnInit(EventArgs e)

{

this.Load += new System.EventHandler(this.Page_Load);

base.OnInit(e);

}

}

Програміст ініціалізує змінні сторінки за замовчуванням. Перед видачею клієнтові ASP.NET - сторінки сервер виконує метод OnInit, обробляє подію Load, пов’язану з завантаженням даної сторінки не генеруючи ніяких додаткових даних..

Перевантажений метод OnInit заносить у подію Load делегатом EventHandler метод Page_Load, що має виконуватись при наступленнні події - завантаження сторінки.

Метод Page_Load виконується кожного разу при виклику сторінки. Властивість Page.IsPostBack є false, якщо користувач викликає сторінку перший раз, і true, коли сервер повторяє реалізацію виклику. В наведеному прикладі при завантаженні сторінки HTMLConrol.aspx завантажиться сторінка https://daily.lviv.ua;

Основні елементи HTML-сторінки (значення id в коді сторінки та назви класів в.NET платформі), позначення їх назв (етикеток) в HTML- коді та пояснення їх функцій наведено в наступній таблиці:

 

Елемент HTML Етикетка HTML Опис
HtmlAnchor < a> Посилання на документи
HtmlButton < button> Кнопка
HtmlForm < form> Форма зворотнього зв’язку
HtmlGeneric   Етикетка HTML не має назви
HtmlImage < image> Зображення
HtmlInput... < input type="..." > Для введення даних: кнопки " button", " submit" та " reset", текст " text" та " password"), опції " checkbox" і " radio", зображення " image", файли " file", захований ввід " hidden".
HtmlSelect < select>  
HtmlTable... < table> < tr> < td> Таблиці, рядки і стопці
HtmlTextArea < textarea> Область тексту

Web-елементи управління. Другою складовою ASP.NET –сторінок є Web-елементи управління ASP.NET, які потребують атрибута runat=" server" і описуються у файлі.aspx з допомогою етикеток за формою

< asp: control id=" identificator" runat=" server" />

де control – тип web-елемента управління (етикетка, кнопка, список тощо), identificator - його назва - змінна доступу до елемента. Деякі елементи мають закриваючу дужку типу < /asp: control >.

Наведемо конкретний приклад елемента управління - кнопки Button, для якої описується тип, назва, напис та назва функції для виконання після натискання кнопки:

< asp: Button ID=" btnFillData" runat=" server"

Text=" Fill Grid" OnClick=" btnFillData_Click" />

Щоб кнопка працювала необхідно створити блоку коду обробника подій на стороні сервера після натискання кнопки. Зауважимо, що параметри методу є метою делегата типу System.EventHandler:

< script runat=" server" >

protected void btnFillData_Click(object sender, EventArgs e)

{

Button.Text = " The button was pressed";

}

< /script>

Код цього скрипту записується безпосередньо в тілі сторінки файлу.aspx.

У наступному прикладі позначимо файл елементів управління як WebControl.aspx. У секції form сторінки використаємо елемент - кнопку Button, при натисканні якої має бути видруковано текст на сторінці ASP.NET:

...

< form id=" WebControl" method=" post" runat=" server" >

< asp: Button id=" Button" runat=" server" Text=" Press the button" > < /asp: Button>

< /form>

...

Натискання на кнопку відслідковується фрагментом тексту класу WebControl (WebControl.cs), який розташований оремо від файлу WebControl.aspx:

public class WebControl: System.Web.UI.WebControls

{

private void Button_Click(object sender, System.EventArgs e)

{

Button.Text = " The button was pressed";

}

}

При натисканні кнопки відпрацює реакція та зміниться текст на кнопці.

Елементи управління ASP.NET застосовуються подібно до того, як вони застосовуються в Windows- програмах. Набір таких елементів наведено у таблиці:

Елементи управління Опис
AdRotator Послідовність зображень (наприклад, банер)
Button Кнопка
Calendar Календар місяця
CheckBox Вибір поля
CheckBoxList Група елементів вибору
DataGrid Таблиця даних
DataList Список за шаблоном
DropDownList Список випадаючий
HyperLink Посилання
Image Зображення
ImageButton Кнопка-зображення
Label Етикетка
LinkButton Кнопка-посилання
ListBox Список
Literal Статичний текст
Panel Панель-контейнер
PlaceHolder Зберегти місце для динамічного додавання елементів
RadioButton Радіо-кнопка
RadioButtonList Група радіо-кнопок
Repeater Дозволяє поглядати список елементів управління
Table Таблиця
TextBox Поле редагування
Xml Демонстрація файлу XML або XSL-перетворення

Елементи управління перевірки цілості призначені для видач повідомлення, якщо введені дані не відповідають наперед поставленим вимогам. Перевірка здійснюється автоматично після натискання кнопок Button, ImageButton, посилань LinkButton. Відмінити перевірку можна присвоєнням властивості CausesValidation значення false.

Для елементів контролю необхідно заповнити відповідні властивості, наприклад, елемент RangeValidator здійснює контроль області введених значень з допомогою властивості ControlToValidate (значення), повідомлення про помилку (ErrorMessage) та умови перевірки (тип Type=Integer, дозволена область значень між MinimumValue та MaximumValue).

Елементи контролю цілості даних наведено в наступній таблиці:

Елемент керування з перевіркою Опис
CompareValidator Порівняння значень
CustomValidator Дозволяє використовувати метод контролю введених значень
RangeValidator Перевірка перебування значення в межах
RegularExpressionValidator Перевірка значення як компоненти регулярного виразу
RequiredFieldValidator Обов’язкове введенне значення
ValidationSummary Сумарна інформація про всі помилки на сторінці

 

Наведемо ще один простий приклад ASP.NET сторінки: натисканням відповідної кнопки сервер має міняти колір квадрата і повертати видозмінене зображення. Рис. містить вид web-сторінки у броузері

 

Наступним файлом color.aspx описується саме зображення (при ініціалізації сторінки) та сценарій реакції на натискання відповідних кнопок:
< %@ Page Language=" C#" %>
< html>
< script runat=server>
protected void OnRed(object src, EventArgs e)
{
_color.Style[" background-color" ] = " Red";
}
protected void OnGreen(object src, EventArgs e)
{
_color.Style[" background-color" ] = " Green";
}
protected void OnBlue(object src, EventArgs e)
{
_color.Style[" background-color" ] = " Blue";

}
//занесення делегатами методів реакції на подіїprotected void Page_Init(object src, EventArgs e)
_redButton.ServerClick += new EventHandler(OnRed);
_greenButton.ServerClick += new EventHandler(OnGreen);
_blueButton.ServerClick += new EventHandler(OnBlue);
}
protected void Page_Load(object src, EventArgs e)
{
// чи перший вхід на сторінку? if (! IsPostBack)
{
_color.Style[" background-color" ] = " Red";
_color.Style[" width" ] = " 100";
_color.Style[" height" ] = " 100";
}
}
< /script>
< body>
< form runat=server>
< h2> ASP.NET color page< /h2>
< div id=_color runat=server />
< p>
< input type=button id=_redButton value=" Red"
runat=server />
< input type=button id=_greenButton value=" Green"
runat=server />
< input type=button id=_blueButton value=" Blue"
runat=server />
< /p>
< /form>
< /body>
< /html>

3. Вказівки до виконання роботи

Проглянути бібліотеки Awt та Swing. Спланувати види робіт з введенння –виведенння. Проглянути приклади реалізації інтерфейсу та реакції програми на події.

3. Послідовність виконання роботи

1. Зробити ескіз графічного інтерфейсу.

2. Обгрунтувати вибір класів та методів.

3. Розробити структури даних.

4. Спроектувати класи для задачі.

5. Формалізувати алгоритм.

6. Закодувати візуальні структури.

4.Завдання до лабораторної роботи

1. Створити клас для виведення текстової інформації у поле класу TextArea.

2. Використати клас JFrame для реалізації інтерфейсу.

3. Створити клас для можливості читання тексту на основі лінійки прокручування.

4. творити клас для перегляду зображення з допомогою лінійки прокручування.

5. Створити клас з використанням всіх раніше зазначених компонент користувацького інтерфейсу.

6. Створити клас, метод main якого роздруковує дані з двовимірного масиву.

7. Створити клас, метод main якого методом половинного ділення відрізка Сзнаходить значення кореня функції. Проміжні значення наближень зберегти в масиві та роздрукувати. Використати подвійну точність.

8. Створити клас Line, який містить метод малювання лінії (на основі координат двох точок, ширини лінії та кольору).

9. Створити клас Triangle, який містить метод малювання трикутника (на основі координат трьох точок, ширини ліній та кольору) та який використовує об’єкти типу Line.

10. Для геометричних фігур: квадрата, трикутника і кола знайдіть спільні властивості, створіть клас базовий та три класи похідні.

11. Створити клас Translatorна основі об’єкту класуTableдля зберігання англо-українського словника (англійське слово – українське слово). Основні два методи класу setWords getWord призначені для занесення пари слів та отримання перекладу.

5. Контрольні питання

1. 1. Пояснити які змінні та об’єкти використовуються в ASP.NET-сторінках?.

2. Які класи успадковуються при створенні ASP.NET –сторінок?

3. Які типи файлів використовуються в ASP.NET?

4. Навести правила створення шаблонів

5. Пояснити різницю між файлами.aspx,.ascx,.ashx?

6. Які типи елементів для зв’язуванння даних?

7. Які класи для керування сесіями. в ASP.NET?

8. Які складові компоненти засобів аутентифікації? Яка їх роль?

9. Які функції покладаються на конфігураційний файл сервера.?

ЛІТЕРАТУРА

1. Мельник Р.А. Програмування для мереж за технологією NET.- Видавництво «Українські технології». 2008 р. 200 ст..

2. Хаммонд М., Уоткинз Д., Ейбрамс Б. Программирование на платформе.NET. Київ: “Вільямс”, 2003. - 368 с.

3. Ріхтер Д.. Программирование на платформе.NET FRAMEWORK. M: “Русская редакция”, 2002. - 480 с.

4. Бучек Г. ASP.NET. Программирование. – Санкт-Петербург: “Питер”, 2002.- 510 с.

5. https://www.aspnet.15seconds.com

6. https://www.codesource..com

7. https://elvex.ugr.es/decsai/csharp/

8. https://www.csharp-station.com

9. https://samples.gotdotnet.com/quickstart/

10. https://msdn.microsoft.com/vstudio/

11. https://www.microsoft.com/net/

12. https://msdn.microsoft.com/net/

13. https://www.gotdotnet.com






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.