Рассылка закрыта
При закрытии подписчики были переданы в рассылку "BloggLand и Я | Блоггландия" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
1
|
2
|
3
|
4
|
5
|
||
---|---|---|---|---|---|---|
7
|
8
|
9
|
10
|
11
|
12
|
|
13
|
15
|
16
|
17
|
18
|
19
|
|
20
|
22
|
23
|
24
|
25
|
26
|
|
27
|
29
|
30
|
31
|
Статистика
0 за неделю
В двадцать седьмом выпуске рассылки '.Net Собеседник' вы можете прочесть обзор новых компонент и продуктов, разработанных с использованием платформы .Net, узнать, как провести диагностику приложения и сделать запись в лог, как экспортировать данные в файл XML в SQL Server 2005, а также посмотреть сравнение операции конкатенции строк в сравнении с использованием класса StringBuilder. Со списком вопросов, оставшихся без ответа на форумах .Net сайта http://www.sql.ru/ можно ознакомиться как всегда - в конце номера.
Информационный Канал Subscribe.Ru |
.Net Собеседник #27
Содержание- От автора
- Обзор новостей
- Диагностика и запись логов в ASP.NET
- Время кода - Экспорт данных в файл XML в SQL Server 2005
- Форумы .Net на www.sql.ru
От автора
Здравствуйте, коллеги!
Решил проверить насколько быстрее происходи операция слияния строк с помощью класса StringBuilder , нежели привычная конкатенция строк. Сказано - сделано. Выглядеть это может так -
using System; using System.Text; namespace StringConcatantion { class Class1 { [STAThread] static void Main(string[] args) { string s = ""; Console.WriteLine("Начало конкатенции - {0}",DateTime.Now.ToLongTimeString()); for (int i= 0;i<50000; i++) { s += i.ToString(); } Console.WriteLine("Конец конкатенции - {0}",DateTime.Now.ToLongTimeString()); Console.WriteLine("Начало append'a - {0}",DateTime.Now.ToLongTimeString()); // Учитываем все операции - от создания объекта StringBuilder sb = new StringBuilder(); for (int i= 0;i<50000; i++) { sb.Append(i.ToString()); } // ... и до копирования в строку string s1 = sb.ToString(); Console.WriteLine("Конец append'a - {0}",DateTime.Now.ToLongTimeString()); } } } // Начало конкатенции - 8:20:55 // Конец конкатенции - 8:22:00 // Начало append'a - 8:22:00 // Конец append'a - 8:22:00 |
На этом всё - желаю интересного чтения.
Обзор новостей
-
С января 2005 г. в
Академии АйТи, г. Киев, сертифицированном учебном центре Microsoft, стартует
комплексная программа подготовки технических консультантов, инженеров и
разработчиков ПО в среде Microsoft.NET.
- 2063. Introduction to Microsoft ASP.NET
Цель курса - научить слушателей создавать простые приложения ASP.NET, динамически создающие содержимое Web страниц.- Работа с ASP.NET
- Использование Web элементов управления
- Использование ADO.NET для доступа к данным
- Отделение кода от содержимого Web страниц
- Трассировка на страницах ASP.NET
- Использование Web служб
- Создание приложения ASP.NET
- 2389. Programming with ADO .NET
Цель курса – помочь разработчикам получить навыки, необходимые для эффективной разработки приложений и Web служб, работающих с данными, с помощью Microsoft ADO.NET, Microsoft SQL Server 2000, и платформы Microsoft .NET.- Приложения, работающие с данными и ADO.NET
- Соединение с источником данных
- Взаимодействие с открытой базой данных
- Создание наборов данных
- Чтение и запись XML с помощью ADO .NET
- Построение наборов данных из существующих источников
- Разработка и использование Web служб, работающих с ADO .NET
Читать курсы буду я, автор этой рассылки - записывайтесь; уверен, что будет интересно.
Эти курсы входят в программу подготовки к сертификации Microsoft Certified Solution Developer (MCSD, сертифицированный разработчик программных решений на основе продуктов корпорации Microsoft), которая рассчитана на разработчиков, занимающихся проектированием и разработкой передовых решений для бизнеса с использованием средств разработки, платформ и технологий корпорации Microsoft, а также Microsoft.NET Framework.
Дополнительную информацию Вы можете получить у Ольги Васильевой по телефону (044) 212-02-06,
e-mail: ovasilieva@it-ua.com.- Вышла новая версия форума DnnBB
- Вышла новая версия 2.0 популярного форума DnnBB. Содержит большое количество нового функционала, включая поддержку анонимных постов, RSS, улучшенная модель безопасности, новые возможности по администрированию. Новая версия содержит простую в освоении систему цитирования, в которой можно контролировать то, что хочется цитировать.
- Доступен RichSlider
- Вышла новая версия RichSlider от Richer Components. RichSlider – визуальный слайдер, применяемый для выбора значений и сбора пользовательской информации. Он достаточно прост, настраивается, поддерживает скины, может работать как на стороне сервера, так и на стороне клиента и т.п.
- Вышел плагин Express .NET 2.1
- Плагин Express .NET – это визуальный инструмент RAD для создания COM компонентов, смарт-тэгов и серверов RTD в Visual Studio .NET.
- 2063. Introduction to Microsoft ASP.NET
Диагностика и запись логов в ASP.NET
Диагностика и
запись логов в ASP.NET
Что нужно знать перед тем, как приступить к реализации такой функциональности
ЯЗЫК:
Автор статьи: Scott Allen
ПЕРЕВОД: Чужа В.Ф. ака hDrummer
Перед тем, как наше приложение будет выложено на рабочий сервер, нам нужно
спланировать свои действия на случай выявления ошибок, решение проблем
производительности, а также каких-то нештатных ситуаций. Способность получать и
обрабатывать диагностическую информацию – важная характеристика хорошо
написанного программного обеспечения (ПО). Диагностическая информация может
включать время, необходимое для выполнения критического метода, количество
транзакций, выполненных за единицу времени или количество пользователей
использующих в данный момент приложение.
Сделаем список и дважды проверим его
Перед тем как решать какую информацию мы будем отлавливать и публиковать, стоит
подумать над тем, зачем она вообще нам нужна. Это будет зависеть от типа
приложения, его размера и даже от окружения (приложение, размещающееся у
провайдера обычно имеет меньше доступных к использованию возможностей). Хорошим
началом будет составление списка приоритетов диагностики с детальным описанием
того, как система будет отсылать и хранить информацию. Вот пример такого
списка:
Диагностика | Детали |
Исключение времени выполнения | Система должна отсылать сообщение об ошибке оператору, который в состоянии решить проблему. Сообщения также должны храниться в неком месте с датой и временем возникновения. |
Входящие неверные ссылки | Система должна записывать информацию об ошибке 404 для того, чтобы проводился их еженедельный анализ и была возможность отсылки партнёрам информации об изменившихся или ошибочных ссылках. |
Это лишь пример того, что может быть необходимо для работы приложения. Разные приложения будут иметь разные нужды и приоритеты. Например, приложение, отвечающее за безопасность подключения к Сети, должно записывать попытки войти в систему. Запись может содержать неверный логин, дату и время попытки проникновения и IP адрес клиента. Записанная информация может помочь в борьбе с хакером, который пытается с помощью перебора по словарю подобрать логин/пароль к вашему приложению.
Отвечая требованиям
Читая эту статью, вы также можете параллельно прикидывать требования вашей
системы к сбору диагностической информации. Иной раз они могут и противоречить
тому, что написано в статье.
private void LogException(Exception e) { MailMessage mail = new MailMessage(); mail.To = "admin @ odetocode.com"; mail.From = "webserver @ odetocode.com"; mail.Subject = "Exception!!"; mail.Body = ex.ToString(); SmtpMail.Send( mail ); } |
Вышеприведенный код содержит очень специфические инструкции. Было бы лучше, если бы он выглядел как метод LogException:
private void LogException(Exception e) { LogUtility.Log(LogPriority.High, ex.ToString()); } |
Таким образом мы добавили некий абстрактный слой – класс LogUtility. Можно
дальше развить воображаемую функциональность такого класса. LogUtility может
принимать решение кому писать письмо и писать ли его вообще, на основании
введенных параметров. Это решение может базироваться и на значениях переменных
конфигурационного файла, такие значения можно менять на лету, добиваясь
изменения поведения приложения без перекомпиляции. Конечно, придётся написать
немного больше кода для того, чтобы это заработало, но в результате получим
большую гибкость и настраиваемость. Есть и библиотеки сторонних производителей,
которые могут помочь нам с этим, что мы и рассмотрим чуть позже.
Трассировка в ASP.NET
В ASP.NET есть встроенные возможности трассировки на уровне страницы и
приложения. Если трассировка разрешена, то вы можете просматривать
трассировочную информацию из браузера, поскольку ASP.NET может добавлять её в
конец страницы. Данные трассировки включают массу полезной информации, включая
время выполнения, размер view state, серверные переменные и их значения, куки,
заголовки HTTP, значения переменных, переданных в строке запроса и т.п.
<configuration> <system.web> <trace enabled="true" requestLimit="20" pageOutput="true" localOnly="true" /> <system.web> </configuration> |
Для того, чтобы привести вывод Trace к более приятному виду, а также получить
возможность вмешаться в его вывод, можно прочесть статью Dino Esposito
“MyTracer Monitors and Traces ASP.NET Apps”.
Счётчики производительности
Журнал событий
Журнал событий может быть как источником диагностической информации, так и
средством для её хранения. Как уже говорилось выше, нам не хотелось писать в
журнал часто обновляющуюся информацию – просто для того, чтобы не забивать его.
Правильно составленное сообщение в журнале должно дать администратору точное
указание, какая проблема произошла в приложении. Писать всю информацию об
исключении пожалуй будет не лучшей идеей, а вот написать “ошибка подсоединения
к серверу БД Northwind” вполне может оказать хорошую службу администратору. В
статье Rob'a Howard’a “An Exception To The Rule, Part 2” показано, как можно
отловить необработанное исключение и записать его в журнал событий.
Журналы Веб
Ещё одним третребованием, которое мы предъявляли, было отлавливание сообщений
«file not found» (файл не найден).Эту информацию можно найти в логе
веб-сервера, вместе с IP-адресом клиента, заголовком HTTP-реферерра (т.е. где
лежит неправильная ссылка), кодом HTTP ответа, его размер, время, необходимое
для завершения ответа.
Email, файлы и базы данных
Есть ещё способы доставки диагностической информации пользователю, кроме
журнала событий и счётчика производительности. Электронная почта – хороший
способ доставить её тому, кому она необходима.
ПО для ведения логов и диагностики
Есть несколько инструментов, обеспечивающих запись информации. Один из них -
log4net, доступен по адресу http://logging.apache.org/log4net/.
log4net предлагает слой абстракции, о котором мы говорили ранее. Всё, что надо,
делается парой строк вроде:
log.Debug(“This is a debug message”);
log.Info(“This is an informational message”);
Можно сконфигурировать log4net для отсылки сообщений по нескольким адресатам, с помощью конфигурационных настроек. Такими адресатами могут быть провайдер ADO.NET, ASP.NET Trace, адресат электронной почты, журнал событий, пакет UDP и т.п. Следующая запись будет отсылать сообщение в приёмник данных .NET ремотинг по протоколу TCP.
<appender name="RemotingAppender"
type="log4net.Appender.RemotingAppender" >
<sink value="tcp://localhost:8085/LoggingSink" /> <lossy value="false" /> <bufferSize value="95" /> <onlyFixPartialEventData value="true" /> </appender> |
Ещё одним примером такого ПО может служить ПО с открытым кодом Logging Application Block from Microsoft Последняя версия этого ПО также поддерживает шифрование диагностической информации.
В итоге
В этой статье мы рассмотрели несколько популярных способов по сбору и распространению диагностической информации в ASP.NET (а их ещё очень много!). Три составных успешной диагностики включают: 1) Составление списка требований 2) Соответствие этих требований доступных диагностическим и записывающим возможностям 3) Реализация дополнительного слоя в вашем ПО для создания гибкого, конфигурируемого и эффективного инструмента ведения журналов (логов).
Время кода
Экспорт данных в файл XML в SQL Server 2005
ЯЗЫК: C#
АВТОР: Jasper Smith,
Отзывы
ПЕРЕВОД: Чужа В.Ф ака hDrummer
Обзор
В этой статье будет рассказано как скомбинировать интеграцию CLR с улучшенным FOR XML для лёгкой генерации файлов xml из ваших реляционных данных. Для ознакомления с хранимыми процедурами .NET, ознакомьтесь со статьёй Introducing CLR Stored Procedures in SQL Server 2005. В этой статье используется таблица Orders в БД Northwind. Демонстрационные БД для сервера SQL 2005 вы можете найти здесь.
Код .NET
Первым делом надо написать код .Net для нашей хранимой процедуры (ХП) и скомпилировать его. В этом случае мы собираемся создать процедуру, которая принимает в качестве параметра имя файла и некоторое содержимое ( в виде параметра типа nvarchar(max)) и просто пишет это содержимое в файл.
[C#]
using System; using System.Data.SqlServer; using System.Data.SqlTypes; using System.IO; public class SQLCLRIO{ public static void WriteToFile(String content,String filename) { SqlPipe sqlP = SqlContext.GetPipe(); try { File.WriteAll(filename, content + "\n"); } catch(Exception ex) { sqlP.Send("Error writing to file : " + ex.Message); } } } |
Для того, чтобы можно было использовать этот код в SQL Server 2005, для начала необходимо скомпилировать его в виде сборки. Затем мы можем загрузить её в SQL Server и создать TSQL заголовок ХП для нашего кода на .Net. Команда, приведенная ниже, демонстрирует то, каким образом можно скомпилировать код в сборку. В этой статье мы будем считать, что код хранится в файле c:\WriteToFile.vb или c:\WriteToFile.cs. (Примечание: Команда должна быть записана одной строкой)
[C#] csc /target:library c:\WriteToFile.cs /r:"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlaccess.dll" |
Код T-SQL
Теперь, когда у нас есть сборка (c:\WriteToFile.dll), мы можем
загрузить её в SQL Server и создать нашу ХП. Делаем это с помощью новой команды
CREATE ASSEMBLY так, как это описано ниже. Нам нужно указать параметр
permission_set EXTERNAL_ACCESS, поскольку ХП необходим доступ к файловой
системе.
create assembly WriteToFile from 'c:\WriteToFile.dll' with permission_set = external_access |
Теперь, когда мы загрузили сборку, нужно создать нашу хранимую процедуру. Делаем это с помощью стандартной команды TSQL CREATE PROCEDURE, но вместо написания тела процедуры указываем EXTERNAL NAME, в котором прописываем имя процедуры в сборке .NET в виде <имя_сборки>.<имя_класса>.<имя_метода> :
create procedure writetofile ( @content nvarchar(max), @filename nvarchar(255) ) as external name writetofile.SQLCLRIO.WriteToFile |
Теперь, когда ХП создана, можно использовать её для записи содержимого (в нашем случае xml) в файл. Простой запрос вернёт нам содержимое таблицы Northwind.dbo.Orders и создаст правильно сформированный xml-документ, который мы и запишем в файл с помощью ХП WriteToFile. Запрос использует возможность объявления локальных переменных типа LOB - varchar(max) и nvarchar(max) – эти типы данных заменили собой типы text и ntext, а также новую директиву для указания корневого элемента для FOR XML, здесь ею будет <AllOrders>. Этот код создаст новый файл AllOrders.xml, в котором записана вся информация о заказах из БД Northwind. Содержимое файла можно просмотреть в веб-браузере.
declare @xml nvarchar(max)
set @xml = ( select * from Orders for xml auto,elements,root('AllOrders')) exec writetofile @xml,'c:\AllOrders.xml' |
{К содержанию}
Форумы .Net - вопросы оставшиеся без ответа
SharePoint
Services & MS SQL 2000
проблема с передачей параметров OracleClient
Проблема
индексации поисковиками
Научи
меня, о всемудрый Гуру, как обойти эту заморочку в
Пример
smart device application работы с базой данных
DCOM,
COM+
Show
WebForm как Popup ?
Вставить
изображение в базу (Oracle)
На этом двадцать седьмой выпуск .Net Собеседника закончен.
До следующего номера.
Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения, вопросы и замечания.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.dotnetgrains |
Отписаться |
В избранное | ||