Что такое код asp appendtolog

Содержание

IT Notes

четверг, 26 августа 2010 г.

Основы Asp.Net – Часть 4

В этой статье мы поговорим об архитектуре web-приложения ASP.NEТ.

Архитектура web-приложения ASP.NEТ

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

Главное различие между классическими ASP и ASP.NET заключается в том, что страница *.aspx, которую запрашивает внешний клиент, представлена уникальным классом С#, на который и указывает атрибут Codebehind. Когда клиент запрашивает страницу, среда выполнения ASP.NET создает объект этого класса. Этот файл не показывается в окне Solution Explorer. Чтобы его открыть, необходимо щелкнуть правой кнопкой мыши на уже открытом файле *.aspx и в контекстном меню выбрать View Code. Изначально содержимое этого файла выглядит следующим образом:

public class WebForml : System.Web.UI.Page

Page.Init =+ new System.EventHandler(Page_Init);

protected void Page Load(object sender. System.EventArgs е)

// Добавляем пользовательский код для инициализации страницы

protected void Pagelnit(object sender. EventArgs е)

private void InitializeComponent()

this.Load += new System.EventHandler(this.Page Load):

Как мы видим, исходный код очень простой. Конструктор класса устанавлива­ет обработчик события для события Init. Реализация этого обработчика вызывает метод InitializeComponent(), который, в свою очередь, устанавливает обработчик события Load.

Тип System.Web.UI.Page

Как мы видим, любая страница ASP.NET представлена классом, производным от System.Web.UI.Page. Этот класс определяет свойства, методы и события, общие для всех страниц, предназначенных для выполнения в среде ASP .NET. Некоторые наи­более важные свойства этого класса представлены в табл. 4.

Таблица 4. Свойства класса page

Application Возвращает объект HttpApplicationState

Cache Возвращает объект Cache, в котором хранятся данные приложения, частью которого является эта страница

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

Request Возвращает объект HttpRequest, используемый для получения информации о входящем запросе НTTР

Response Возвращает объект HttpResponse, при помощи которого можно скомпоновать данные, возвращаемые браузеру клиента

Server Возвращает объект HttpServerUtility

Session Возвращает объект System.Web.SessionState.HttpSessionState, при помощи которого можно получить информации о текущем сеансе подключения

Как мы видим, свойства класса Page обеспечивают нам те же возможности, кото­рые были в нашем распоряжении в классических ASP. В классе Page также имеет­ся несколько унаследованных методов (они используются редко) и несколько очень важных событий, представленных в табл. 5.

Таблица 5. Наиболее важные события класса page

Init Это событие происходит, когда страница инициализируется. Это – первое событие жизненного цикла страницы

Load Это событие происходит после события Init. Обработчик этого события можно использовать для настройки любых элементов управления WebForm

Unload Происходит при выгрузке объекта из памяти. Можно использовать, к примеру, для освобождения ресурсов

Обработчик события Load — лучшее место установления соединения с источником данных (например, для заполнения на форме элемента управления WebForm DataGrid) или выполнения других подготовительных действий. Обработчик события Unload можно использовать, например, для закрытия этого соединения и выполнения других аналогичных действий.

Связка *.aspx/Codebehind

Помимо готовых членов, унаследованных от Page, мы можем определить в своем классе С# собственные члены, которые могут быть вызваны (не напрямую) при помощи блоков в файле *.aspx. В классических ASP все дополнительные возможности приходилось определять непосредственно в коде файла *.asp. В ре­зультате этот файл превращался в совершеннейшие джунгли из тегов HTML и кода VBScript (или jаvаSсriрt). Читать такие файлы было очень тяжело, а использовать их код повторно — еще тяжелее.

В ASP.NET эта проблема решена за счет того, что код представления (то есть код для генерации кода HTML) помещен в файл *.aspx, а прочая программная логика — обычным образом в файл С# *.aspx.cs.

Как же происходит обращение к пользовательским членам класса, производного от Page? Предположим, что мы определили в таком классе простенькую функ­цию, возвращающую текущее значение даты и времени:

public class WebForml : System.Web.UI.Page

// Автоматически сгенерированный код.

public string GetDateTime()

Обратиться к этой функции из файла * .aspx можно так:

Создание ASP-компонентов в Delphi 6

Что такое ASP

SP (Active Server Pages) — технология, которая позволяет создавать Web-страницы, содержащие код, выполняемый Web-сервером, и динамически формировать Web-страницы. Вместе с Microsoft Internet Information Services поставляется несколько COM-объектов, выполняющих серверный код. Современная версия этой технологии позволяет использовать в ASP-страницах произвольные серверные компоненты. Клиентское приложение, использующее ASP-объекты, представляет собой HTML-документ (куда могут также входить клиентский и серверный коды на скриптовых языках), который можно прочесть практически с помощью любого Web-браузера. Обычно эти HTML-документы размещаются на каком-либо Web-сервере (как правило, это Microsoft Internet Information Server версии 3.0 и выше). Web-сервер, получив требование о предоставлении документа, считывает его из локального хранилища и передает клиенту, при этом часть информации вносится в документ Web-сервером динамически; сам же Web-сервер в этом случае может обращаться к ASP-объектам (входящим в комплект поставки Internet Information Server или созданным сторонними разработчиками). Как правило, Web-документы, содержащие обращения к ASP-объектам, имеют расширение *.asp. Примеры подобных документов можно найти в каталогах, создаваемых при установке Internet Information Server.

Ранее (см. Компьютер Пресс, №2’2001, c. 169) мы рассказывали о создании простейших ASP-приложений, в том числе для работы с базами данных. Настоящую публикацию следует рассматривать как продолжение той статьи.

Объекты, используемые в ASP

ерархию объектов, используемых в технологии ASP, можно увидеть на рис. 1.

Рис. 1. Иерархия объектов ASP-сервера

Объект Request

Объект Request используется для доступа к данным, которые формируются клиентом при обращении к ASP-серверу. Доступ к объекту Request получают с помощью интерфейса IRequest, которому присущи следующие основные свойства и методы:

  • свойство ClientSertificate — содержит значения всех полей клиентного сертификата, которые пересылаются в http-сообщении;
  • свойство Cookies — содержит значения всех заголовков Cookie в HTTP-запросе. Cookie — небольшие текстовые файлы, которые запоминаются на компьютере конечного пользователя и передаются на сервер в каждом запросе. С их помощью можно создать «сессию» для клиента: когда клиент обращается первоначально к одной, затем к другой странице и т.д. (при этом клиент не имеет права перейти к следующей странице, не обратившись к предыдущей);
  • свойство Form — если клиент осуществляет обращение к ASP-серверу с помощью формы, то можно получить значения заполненных полей в форме при обращении к свойству Form с добавлением имени поля;
  • свойство ServerVariables — содержат большинство переменных, необходимых для формирования HTTP-заголовков;
  • свойство TotalBytes — суммарное число байт, которые передаются клиентом на сервер. Реальное число байт может быть меньше, так как протокол HTTP не позволяет пересылать пакеты, размер которых превышает 8 Kбайт;
  • свойство QueryString — содержит имена и значения полей запроса при использовании метода GET;
  • свойство Body — содержит имена и значения полей запроса при использовании метода POST;
  • метод BinaryRead — используется для получения содержимого всего запроса, посылаемого клиентом, если размер запроса превышает 8 Kбайт. Вызов этого метода позволяет получить следующие 8 Kбайт данных HTTP-запроса. Вызов следует повторять до тех пор, пока не будет прочитан весь запрос; при этом размер последнего пакета может быть менее 8 Kбайт. Результаты вызова метода запоминаются в двоичном массиве. Следует обратить внимание на то, что после вызова этого метода нельзя обращаться к свойству Form.

Объект Response

В этом классе формируется отклик ASP-сервера, который передается клиенту. Доступ к этому объекту осуществляется через интерфейс IResponse. Основные свойства и методы данного интерфейса таковы:

  • свойство Cookies — позволяет создать коллекцию параметров вместе с их значениями. К этой коллекции также добавляется время, в течение которого данную коллекцию следует сохранять в клиентском приложении. При успешном получении отклика клиент запоминает эти параметры на диске в виде файла. При следующем обращении к серверу эти данные будут переданы в запросе и их можно будет получить при использовании свойства Request.Cookie. Анализ этих данных позволяет определить, обращался ли клиент к серверу ранее и если обращался, то с какими запросами. Cookie используются для создания «сессии» с клиентом в CGI-приложениях, поскольку IP-адреса клиента могут изменяться Proxy-серверами во время сессии. В ASP-приложениях возможно также создание сессии для клиента (это мы обсудим ниже);
  • свойство Buffer — если значение этого свойства равно True, то осуществляется буферизация отклика. При этом значении параметра отклик клиенту не отправляется до тех пор, пока не будет вызван метод Request.End (этот метод автоматически вызывается после обработки всего ASP-документа, то есть когда сформированы отклики от всех ASP-серверов) или Flush;
  • свойство CacheControl — определяет, может ли клиент кэшировать отклик;
  • свойство Charset — определяет имя шрифта для содержимого отклика ContentType=”text/html”;
  • свойство ContentType — указывает содержимое отклика. По умолчанию это свойство имеет значение text/html. Это значение необходимо изменять, например, при передаче картинок (image/jpeg или image/gif и т.д);
  • свойство Expires — при значении CacheControl=True определяет, сколько времени хранится отклик на клиентском месте;
  • свойство ExpiresAbsolute — то же самое, что Expires, только определяет абсолютную дату и время хранения отклика;
  • свойство IsClientConnected — указывает, был ли клиент отсоединен от сервера;
  • свойство Status — нормальное значение статуса «200 OK» означает успешную генерацию отклика. При невозможности создать отклик следует изменять значение статуса. Так, «401 Unauthorized» означает, что пользователю запрещено обращаться к данной странице по соображениям безопасности, например в случае неправильно введенного пароля;
  • метод AddHeader — добавляет заголовок в отклик. Заголовки добавляются в виде =” ”;
  • метод AppendToLog — добавляет строку в Log-файл Web-сервера. Эта строка не передается клиенту;
  • метод BinaryWrite — формирует двоичный отклик. Чаще всего используется для передачи клиенту картинок;
  • метод Clear — полностью очищает отклик. После этого его требуется формировать заново с самого начала;
  • метод End — прекращает обработку ASP-документа и немедленно возвращает результат клиенту. Вызывается автоматически после завершения обработки ASP-документа, но может быть вызван явно из кода ASP-сервера. После его вызова вызовы методов Write или BinaryWrite запрещены;
  • метод Flush — отправляет текущее содержимое буфера клиенту. Формирование отклика может продолжаться дальше;
  • метод Write — используется для записи текстовой информации в отклик;
  • метод Redirect — позволяет переадресовать запрос на другой URL. При этом можно поменять параметры запроса в объекте Request.

Объект Server

Этот объект позволяет обращаться к Internet Information Services и экспонирует ряд его методов и свойств:

  • свойство ScriptTimeout — время в минутах, в течение которого сессия существует без генерации нового запроса или без вызова команды Refresh со стороны клиента;
  • метод CreateObject — вызов этого метода используется для запуска COM-сервера, который будет принимать скрипты с ASP-документа и генерировать отклик, который вставляется вместо скрипта;
  • метод Execute — выполняет скрипт в указанном ASP-файле;
  • метод GetLastError — возвращает объект ASPError, в котором можно получить полную информацию о последней ошибке;
  • метод HTMLEncode — заменяет зарезервированные символы в HTML-документе подходящим набором символов, которые интерпретируются браузером и позволяют клиенту увидеть на экране зарезервированные символы. Например, дизайнер Web-сайта хочет, чтобы клиент увидел на экране следующее сочетание символов:
    . Если эту последовательность вставить в HTML-документ, то она будет интерпретирована как разрыв строки. Для этой последовательности символов метод HTMLEncode вернет: %3CBR%3E. При помещении этой последовательности символов в HTML-документ клиент увидит на экране
    ;
  • метод MapPath — конвертирует путь, выраженный в терминах виртуальных каталогов (абсолютный или относительный), в путь к физическому каталогу на данном компьютере;
  • метод Transfer — пересылает весь текущий отклик к другому ASP-серверу для продолжения формирования отклика;
  • метод URLEncode — перекодирует URL, включая специальные символы, в строку.

Объект Session

Этот объект создается во время первого обращения клиента к ASP-серверу. Замечательная особенность этого объекта — его способность сохраняется в течение некоторого времени после генерации отклика клиенту. Если в течение этого времени клиент вновь обратится к серверу, то сможет работать внутри ранее созданной сессии. Если внутри этого объекта объявить переменные, то в них можно запоминать состояние клиента. Этот факт значительно облегчает проведение сессий с клиентом по сравнению с CGI-приложениями, где постоянно приходится анализировать Cookie. Основные свойства и методы объекта Session:

  • свойство StaticObjects — коллекция всех объектов, добавленных к сессии при помощи тэга . Можно прочитать или изменить все значения свойств этих объектов. Вызов метода Remove удаляет данный объект. Вызов метода RemoveAll удаляет все объекты;
  • свойство Contents — коллекция всех динамически создаваемых объектов. Эти объекты можно создавать во время выполнения и использовать их при последующих обращениях клиентов к Web-серверу;
  • свойство CodePage — указывает страницу кодировки символов, которая может изменяться в зависимости от локальных настроек;
  • свойство LCID — языковой идентификатор, используемый для интерпретации текстовых строк;
  • свойство SessionID — идентификатор сессии для данного клиента. Генерируется автоматически и является постоянным для всех запросов данного клиента;
  • свойство Timeout — время в минутах, в течение которого существует сессия без генерации нового запроса или без вызова команды Refresh со стороны клиента;
  • метод Abandon — разрушает сессию и возвращает все ресурсы;
  • событие Session_OnStart — генерируется в момент создания сессии. Оно генерируется после события Application_OnStart, но до начала выполнения кода. Все переменные в сессии уже являются доступными, и к ним можно обращаться. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
  • событие Session_OnEnd — наступает перед разрушением сессии по истечении времени TimeOut или после вызова метода Abandon. В обработчике событий можно работать с объектами Application, Server и Session, но не с Request и Response. Обработчик этого события должен быть написан на языке VBScript или JavaScript.

Для сохранения состояния клиента (это главная особенность) используется следующий синтаксис:

Рассмотрим в качестве примера Интернет-магазин. Предположим, пользователь на первой Web-странице выбирает наименование товара (например, Intel Processor), на второй странице — количество этого товара (например, 5), на третьей странице отображается цена, после чего ожидается подтверждение заказа. Ясно, что для генерации третьей страницы необходимо знать значения параметров с первых двух страниц. Поэтому после возвращения отклика с первой страницы используется команда:

Session.Value[‘GoodName’]:=’ Intel Processor ‘;

Имя выбранного товара можно получить после анализа свойств объекта Request. После второй страницы используем команду:

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

В объекте Session можно также запоминать динамически создаваемые объекты (об этом будет рассказано ниже).

Объект Application

Этот объект используется для хранения и обработки данных, которые являются общими для всех сессий. При помощи объекта Application можно передавать данные от одного клиента к другому. Основные свойства и методы объекта Application:

  • свойство Contents – содержит список всех объектов, которые были добавлены при выполнении скриптов из ASP-документов. Объект Contents имеет два метода: Remove удаляет данный объект, а RemoveAll удаляет все объекты. Сюда же можно помещать ссылки на динамически создаваемые объекты при выполнении кода ASP-сервера;
  • свойство StaticObjects — список всех объектов, которые были добавлены при помощи тэга ;
  • метод Lock. Клиенты работают в многопоточном режиме, а переменные в объекте Application являются общими для всех клиентов. Поэтому если надо обратиться к свойствам объекта Application или к методам, которые работают с переменными данного объекта, то обязательно требуется вызов метода Lock. Это дает возможность безопасно работать с переменными Application, в то время как остальные клиенты будут ожидать окончания работы с этим объектом. После чтения или записи свойства (либо окончания работы метода) требуется вызов метода Unlock, и только после этого переменные (методы) будут доступны для других клиентов;
  • метод Unlock — делает доступными переменные или методы объекта Application другим клиентам;
  • событие Appliation_OnStart — наступает в момент первого старта приложения и продолжается до создания сессии. Из обработчика этого события можно обращаться только к объектам Server и Application. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
  • событие Application_OnEnd — вызывается в момент завершения ASP-приложения, после разрушения всех сессий. Доступные объекты и языки для описания обработчика те же, что и у обработчика Application_OnStart.

Использование объекта Session для хранения состояния

втоматическая обработка полей Cookie в ASP-технологии позволяет определить, обращался ли ранее клиент к данному Web-серверу. При первом обращении клиента для него создается объект Session. При последующих обращениях этого же клиента для него назначается ранее созданный объект Session. Объект Session разрушается либо при отсутствии в течение интервала времени Session.TimeOut новых запросов от клиентов, либо при вызове метода Session.Abandon из кода. В объекте Session можно хранить переменные и объекты, которые динамически создаются или изменяются. Эти изменения видны при каждом последующем обращении клиента. Таким образом, объект Session может хранить состояние клиента. Данная возможность, реализованная на уровне технологии, обеспечивает ASP-приложениям существенные преимущества по сравнению с CGI- и ISAPI-приложениями, где для хранения состояния необходимо писать трудоемкий код для работы с Cookie.

Для тестирования прежде всего требуется настроить Microsoft Internet Information Services (IIS). Для этого создадим виртуальную директорию IIS, которая обязательно должна иметь разрешение как на чтение (из нее будут читаться данные), так и на выполнениe скриптов (из нее будет загружен *.asp-документ). Директория должна быть доступна с помощью протокола HTTP. Поэтому в первую очередь нужно обратиться к Web-сервису Internet Information Server, просмотреть список доступных директорий и при необходимости создать новые с соответствующими правами доступа.

В нашем примере на компьютере, который имеет IP-адрес 192.168.0.2, была создана виртуальная директория /Test, соответствующая физическому адресу на компьютере C:\ASPTest. В директорию, имеющую права доступа Read и Script, был скопирован файл Test.asp. Сам файл ASP01.dll (COM-сервер) можно поместить в произвольную директорию. Главное — чтобы он был зарегистрирован в системном реестре. Для этого после выполнения команды Save As в Delphi 6 выберем команду меню Run/Register ActiveX server и выполним ее.

Продолжим работу с сессией. Воспользуемся проектом, создание которого было описано ранее (см. КомпьютерПресс, № 2’2001, c. 196). Исходный код проекта можно найти на нашем CD-ROM. Сначала разберемся, каким образом можно сохранять и изменять переменные. Для этого в секции private класса TTest модуля ASP01_U1 обьявим метод:

В каждом методе модуля ASP01_U1 вызовем метод IncrementCallCount с параметром Name= . Например, в ранее объявленном методе GetPicture (см. КомпьютерПресс, № 2’2001, с.196) обратимся к IncrementCallCount следующим образом:

Далее добавим в библиотеку типов новый метод GetCallCount, как было описано выше. Реализуем этот метод следующим образом:

И наконец, создадим ASP-документ с вызовом метода GetCallCount:

Сохраним этот документ в файле Test3.asp в директории C:\ASPTest (напомним, что она зарегистрирована в Internet Information Server и имеет разрешения на чтение и выполнение кода). Далее, обращаясь к ранее созданным ASP-документам, будем обращаться к объявленным ранее методам ASP-сервера в произвольной последовательности и произвольное число раз, пока, наконец, не дойдем до страницы Test3.asp. В результате получим примерно следующий отклик, какой представлен на рис. 2.

Рис. 2. Результат выполнения метода GetCallCount в ASP-сервере

Напротив названия каждого метода стоит число обращений к нему клиента в текущей сессии. Если вызвать команду Refresh в браузере, то можно заметить, что число напротив надписи GetCallCount увеличится на 1.

Данные в коллекции Session.Value хранятся в виде вариантных переменных; иными словами, они могут принадлежать любому типу, конвертируемому в OleVariant: integer, single, double, WideString и т.д. Можно хранить и массивы — для этого вызывается функция VarArrayCreate. Доступ к переменным осуществляется по имени. Коллекция Session.Value возвращает пустое значение (null), если ранее переменная с данным именем не была добавлена к коллекции. Добавление новой переменной осуществляется в случае присвоения значения элемента коллекции с уникальным именем.

Однако ссылки на экземпляры классов (объекты) в этой коллекции хранить нельзя. Точнее говоря, хранить их можно: например привести указатель к типу integer и сохранить в коллекции Session.Value. Далее можно получать доступ к объекту приведением типа и таким образом при каждом следующем обращении клиента получать ссылку на объект и работать с ним. Казалось бы, все хорошо, однако при разрушении сессии по истечении TimeOut деструкторы объектов вызваны не будут. Это означает, что при работе такого сервера постепенно будут исчерпываться доступные системные ресурсы и в конце концов Web-сервер просто «рухнет». Если бы существовала возможность создать обработчик события Session_OnEnd в коде Delphi, то деструкторы можно было бы вызвать явно. Однако этот обработчик может быть создан только в ASP-документе на языках VBScript или JavaScript.

Илон Маск рекомендует:  Шаблон сайта мини компании HTML, CSS

Выход из создавшейся ситуации заключается в использовании коллекции Session.Contents, которая предназначена для хранения объектов. В принципе, коллекция Session.StaticObjects также используется для хранения объектов, но ее нельзя модифицировать во время выполнения приложения. Идея хранения объектов в коллекции Session.Contents заключается в следующем: объекты, которые необходимо хранить, поддерживают интерфейс IUnknown (или его потомок). Именно ссылка на этот интерфейс и помещается в коллекцию Session.Contents. При закрытии сессии для всех интерфейсов, хранящихся в этой коллекции, вызывается метод Release. Соответственно из этого обработчика событий можно вызвать деструктор класса при равенстве нулю числа ссылок на интерфейс.

Для проверки вышесказанного попробуем решить следующую задачу: мы хотим помещать содержимое одной записи в базе данных на отдельную Web-страницу, давая пользователю возможность передвигаться по записям вперед и назад. В этом случае требуется запоминать положение указателя текущей записи в наборе данных, что будет выполняться в компоненте Session. Наиболее простой способ запомнить положение указателя текущей записи — не закрывать набор данных после формирования отклика пользователю.

Первоначально создадим ASP-документ, содержащий форму с двумя кнопками: Back и Next. В данном документе вызовем новый метод ASP-сервера, который назовем, например, TestSession. В этом методе будем анализировать запрос и смещать текущую запись вперед или назад. Сохраним документ в файле Test4.asp. Окончательный вид документа следующий:

Далее создадим новый модуль данных и поместим на него компоненты TADOConnection и TADOTable. В ADOConnection1 сошлемся на базу данных Northwind. В компоненте ADOTable1 сошлемся на ADOConnection1, свойству TableName присвоим значение Alphabetical list of products, а его свойство Active установим равным True. Это означает, что немедленно после отработки конструктора будет установлена связь с сервером баз данных. Объявим новый интерфейс ISessionObject — потомок IUnknown. Полезно к этому интерфейсу добавить метод, который будет возвращать указатель на модуль данных. Несмотря на то что использовать указатели в интерфейсах запрещено вследствие необходимости осуществлять маршалинг для разных модулей, в нашем случае это оправданно, поскольку данный метод будет использоваться только внутри модуля ASP01. Все внешние приложения (в том числе Internet Information Services) будут работать с этим интерфейсом как с Iunknown, не «зная» о существовании метода, возвращающего указатель.

Окончательный код выглядит следующим образом:

Данный код прост и не требует комментариев. Ключевой метод — ObjRelease — уменьшает число ссылок и при их равенстве нулю вызывает деструктор класса. Некоторые изменения потребуются и в классе TTest модуля ASP01_U1. Прежде всего необходимо вызвать конструктор класса TDataModule2. Наиболее подходящее место для вызова конструктора — событие Session_OnStart — недоступно из кода Delphi. Метод AfterConstruction также подходит мало — при обращении к нему не определены ссылки на объекты Session, Application, Server. Необходимо, чтобы эти объекты были инициализированы из интерфейса IScriptingContext — именно это и делает метод OnStartPage. Поэтому будем вызывать конструктор из метода TTest.OnStartPage. При этом следует учитывать, что конструктор мог быть вызван раньше — во время предыдущего запроса клиента. Следовательно, необходима предварительная проверка существования экземпляра класса TTest. Окончательно код будет выглядеть следующим образом:

Первоначально в переменную V пытаемся копировать переменную с именем DataModule, которая хранится в объекте Session. Если это не удается (что происходит, когда пользователь обращается к ASP-серверу в первый раз), то создаем экземпляр класса TDataModule2, получаем от него ссылку на интерфейс ISessionObject и запоминаем ее в объекте Session под именем DataModule. Теперь поведение экземпляра класса TDataModule2 будет корректным: он будет существовать, пока существует объект Session для данного клиента, и разрушаться с окончанием сессии. Чтобы убедиться в этом, достаточно переписать деструктор TDataModule2 и поместить туда оператор Beep (визуальные элементы управления в ASP-приложениях показывать запрещено). Если после этого вновь обратиться к ASP01 и затем выгрузить ASP-сервер, как было описано выше, то можно услышать звук динамика.

Осталось реализовать метод TestSession в классе TTest — он формирует отклик для клиента. В этом методе необходимо получить доступ к хранящемуся в объекте Session экземпляру класса TDataModule2, проанализировать запрос и при нажатии кнопки Next переместить курсор на следующую запись, а при нажатии кнопки Prior — на предыдущую. Окончательный код выглядит следующим образом:

В нем используется определенный ранее метод ISessionObject.getDataModule для получения ссылки на экземпляр класса TDataModule2. Скомпилировав этот проект и обратившись к созданной ранее странице Test4.asp, можно получить отклик, который представлен на рис. 3.

Рис. 3. Навигация по набору данных в ASP-приложении

При нажатии клавиши Next получаем страницу со следующей записью; Prior — с предыдущей.

В заключение следует отметить, что объект Application также имеет аналогичные свойства для хранения переменных и объектов. Эти свойства имеют те же самые названия, что и в объекте Session. Существует два отличия использования аналогичных свойств объекта Application:

How to: Open and Append to a Log File

StreamWriter and StreamReader write characters to and read characters from streams. The following code example opens the log.txt file for input, or creates the file if it does not already exist, and appends information to the end of the file. The contents of the file are then written to standard output for display. As an alternative to this example, the information could be stored as a single string or string array, and the WriteAllText or WriteAllLines method could be used to achieve the same functionality.

Example

using System; using System.IO; ); // Update the underlying file. w.Flush(); > public static vo >

Открытие файла журнала и добавление в него данных

Классы StreamWriter и StreamReader предназначены для записи и чтения знаков из потоков. В следующем примере кода открывается файл log.txt в режиме ввода данных (если такого файла не существует, то он будет создан) и добавляется информация в конец файла. Затем содержимое файла передается для отображения в стандартный поток вывода. В качестве альтернативы данные здесь могут храниться как одна строка или как массив строк, а для обеспечения той же функциональности может быть использован метод WriteAllText WriteAllLines.

Пример

How to: Write Text to a File

The following code examples show how to write text to a text file.

The first example shows how to add text to an existing file. The second example shows how to create a new text file and write a string to it. Similar functionality can be provided by the WriteAllText methods.

Example

using System; using System.IO; ); sw.WriteLine(DateTime.Now); > > >
using System; using System.IO; public , 1, 4.2); sw.Close(); > > >

Запись текста в файл

Следующие примеры кода демонстрируют, как записать текст в текстовый файл.

В первом примере показано, как добавить текст в существующий файл. Во втором примере показано, как создать новый текстовый файл и записать строку в него. Аналогичные функции предоставляются методами WriteAllText.

Пример

How to: Read Text from a File

The following code examples show how to read text from a text file. The second example notifies you when the end of the file is detected. This functionality can also be achieved by using the ReadAllLines or ReadAllText methods.

Example

using System; using System.IO; ); Console.WriteLine(e.Message); > > >

Считывание текста из файла

В следующих примерах кода показаны способы чтения текста из текстового файла. Во втором примере программа выдает сообщение об обнаружении конца файла. Эту функциональную возможность можно получить с помощью метода ReadAllLines или метода ReadAllText.

Пример

using System; using System.IO; public ); sr.Close(); > >

Robust Programming

This code creates a StreamReader that points to MyFile.txt through a call to File. OpenText. StreamReader. ReadLine returns each line as a string. When there are no more characters to read, a message is displayed to that effect, and the stream is closed.

Надежное программирование

Этот код создает поток StreamReader, который указывает на файл MyFile.txt посредством вызова метода File. OpenText. Метод StreamReader. ReadLine возвращает каждую строку файла в виде строки. Когда знаки для чтения заканчиваются, выводится соответствующее информационное сообщение, после чего поток закрывается.

Дата добавления: 2020-03-09 ; просмотров: 47 ; ЗАКАЗАТЬ РАБОТУ

ASP.NET MVC, Is it possible to code a Response.AppendToLog in one place which will act on every Request?

I am using ASP.NET 4.7 and MVC5 with C# with IIS Express locally and published to Azure App Services.

I want to add something like:

Which adds an Original IP address to the request string in the «request» column in the web server log.

If I add this to a specific «get» Action this works fine. However I do not want to add this code to every Action. Is it possible to place it more centrally such that it gets executed on every «Get» / Request. This may be a simple question, but the answer alludes me at present

Обработка веб-форм

На стороне сервера обработка веб-формы ASP.NET происходит поэтапно. На каждом этапе генерируются различные события. Это позволяет странице включиться в поток обработки на любом этапе и выдать ответ любым удобным способом. В следующем списке перечислены основные этапы потока обработки страницы ASP.NET:

Инициализация структуры страницы

Инициализация кода пользователя

Автоматическая привязка данных

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

Инициализация структуры страницы

На этом этапе ASP.NET создает страницу. Генерируются все элементы управления, определенные в дескрипторах внутри веб-страницы .aspx. Более того, если страница запрашивается не впервые (иначе говоря, если это обратная отправка), ASP.NET десериализирует информацию о состоянии представления и применяет ее ко всем элементам управления.

На этом этапе запускается событие Page.Init. Однако это событие редко обрабатывается веб-страницей, поскольку еще слишком рано выполнять инициализацию страницы. Причина в том, что объекты элементов управления еще не созданы, а информация о состоянии представления пока не загружена.

Инициализация кода пользователя

На этом этапе запускается событие Page.Load. Большинство веб-страниц обрабатывают это событие для выполнения любой необходимой инициализации, подобной заполнению динамических текстовых полей или конфигурирования элементов управления.

Событие Page.Load запускается всегда, независимо от того, запрашивается страница впервые или же как часть обратной отправки. К счастью, ASP.NET позволяет программистам различать события первой загрузки страницы и все последующие загрузки.

Почему это важно? Во-первых, поскольку состояние представления поддерживается автоматически, вам необходимо извлекать свои данные из источника динамических данных только при первой загрузке страницы. Во время обратной отправки вы можете позволить ASP.NET самостоятельно восстановить свойства элементов управления из состояния представления. Это может значительно увеличить производительность, если информацию достаточно «дорого» восстанавливать (например, если ее необходимо запрашивать из базы данных).

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

Определить текущее состояние страницы можно, проверив ее свойство IsPostBack, которое при первом запросе страницы будет иметь значение false, например:

Следует помнить, что в состоянии представления сохраняется каждое измененное свойство. Инициализация элемента управления в событии Page.Load считается изменением, поэтому любое затрагиваемое вами значение элемента управления будет сохранено в состоянии представления, что без нужды увеличивает размер страницы и замедляет время передачи данных. С целью ускорения подготовки состояния представления и минимизации размеров страниц избегайте инициализации элементов управления в коде.

Наоборот, устанавливайте свойства в дескрипторе элемента управления (вручную либо в окне Properties (Свойства)). В результате эта информация не будет сохраняться в состоянии представления. В тех случаях, когда действительно легче инициализировать элемент управления в коде, отключите состояние представления для элемента управления, установив EnableViewState в false и инициализируя элемент управления каждый раз при запуске события Page.Load независимо от того, является ли текущий запрос обратной отправкой.

Проверка достоверности

В состав ASP.NET входят специальные элементы управления, которые могут автоматически проверять другие элементы управления, принимающие вводимые пользователем данные, и отображать сообщения об ошибках. Эти элементы управления вступают в игру после того, как загрузится страница, но перед тем как произойдет какое-то другое событие. Однако они по большей части являются самодостаточными, а это означает, что реагировать на генерируемые ими события проверки не нужно. Вместо этого можно в другом обработчике событий проверить, является ли действительной вся страница (с помощью свойства Page.IsValid).

Обработка событий

На этом этапе страница является уже полностью загруженной и проверенной. Поэтому ASP.NET запускает все события, которые успели произойти с момента последней обратной отправки данных. В целом события ASP.NET бывают двух типов:

События, требующие немедленного ответа. К числу таких событий относится щелчок на кнопке отправки формы (Submit) или на какой-то другой кнопке, области изображения или ссылке в многофункциональном веб-элементе управления, который инициирует обратную отправку данных вызовом JavaScript-функции __doPostBack().

События изменения. К числу таких событий относится изменение выбора в элементе управления или текста в текстовом поле. Эти события запускаются для веб-элементов управления немедленно, если свойство AutoPostBack установлено в true. В противном случае они запускаются при следующей обратной отправке страницы.

Как видите, модель событий ASP.NET довольно сильно отличается от традиционной среды Windows. В случае Windows-приложения состояние формы находится в памяти, и приложение работает беспрерывно. Это означает, что на любое событие можно реагировать незамедлительно. В ASP.NET все происходит поэтапно и из-за этого бывает так, чтобы события иногда накапливаются и объединяются в пакеты.

Например, предположим, что имеется страница с кнопкой Submit и текстовым полем, которое не выполняет обратную отправку данных автоматически. Вы изменяете текст в текстовом поле и щелкаете на кнопке Submit. После этого ASP.NET запускает все следующие события (именно в таком порядке):

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

Положительная сторона заключается в том, что модель событий предоставляет более высокий уровень абстракции, что избавляет код от стереотипных фрагментов поддержки состояния. Отрицательная сторона — очень легко забыть о том, что модель событий на самом деле является просто эмуляцией. Это может привести к некорректному предположению (например, ожиданию того, что информация остается в переменных экземпляров) или же неудачному проектному решению (например, сохранению большого количества информации в состоянии представления).

Очистка

В конце своего жизненного цикла страница преобразуется в HTML-разметку. После этого начинается реальная очистка и запускается событие Page.Unload. В этот момент объекты страницы все еще доступны, но окончательная HTML-разметка уже сгенерирована и не может быть изменена.

Вспомните, что у .NET Framework имеется служба сборки мусора, периодически запускаемая для освобождения памяти, занятой объектами, на которые уже нет ссылок. Неуправляемые ресурсы должны освобождаться явно на этапе очистки или, что лучше, перед ним. Когда сборщик мусора уничтожает страницу, запускается событие Page.Disposed. На этом жизненный цикл веб-страницы завершен.

Пример потока обработки страницы

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

Далее необходимо добавить обработчики событий. По завершении в файле отделенного кода будет содержаться пять обработчиков событий, реагирующих на разные события, включая Page.Init, Page.Load, Page.PreRender, Page.Unload и Button.Click.

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

Что такое код asp appendtolog

ASP скрипту, которому передаются данные абсолютно без разницы, какой метод передачи вы используете. Так что лучше, когда вы передаёте данные из HTML формы, используйте метод Post.

Переменные уровня сессии и приложения

Часто бывает необходимо, чтобы хранимые в приложении переменные были доступны в течение всей сессии. Для этого можно использовать так называемые cookies, но у клиента может быть отключена поддержка cookies и в этом случае ваша затея потерпит неудачу.
В ASP существует объект Session. Сессия начинается при первом обращении пользователя к страницам приложения и заканчивается при отсутствии активности пользователя в течении времени, установленного в настройках сервера. В объекте Session можно хранить переменные, которые будут доступны всем страницам вашего приложения на время сессии. Запись данных производится просто:

Session («email») = «pavel@vbnet.ru»

А считываются данные ещё проще:

Dim email
email = Session («email»)
Response.Write email

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

Application («url») = «http://vbnet.ru»

Dim url
url = Application («url»)
Response.Write «Это » & url & «»

Работа с базами данных

Работа с базами данных на ASP осуществляется с помощью технологий ADO и ODBC. Для соединения с базой данных нужно обязательно указывать источник данных. Источник данных — информация о базе данных, главным образом о её типе и местонахождении.
ADO (ActiveX Data Objects) — библиотека, содержащая объекты, с помощью которых можно работать с БД. Чаще всего используются объекты Connection и Recordset. Экземпляры объектов создаются с помощью метода CreateObject объекта Server. Сначала нужно создать соединение (объект Connection), открыть его с помощью метода Open, затем создаём рекордсет (объект Recordset) и открываем его методом Open.
Например:

Set RS = Server.CreateObject («ADODB.Recordset») ‘создаём рекордсет
sSQL = «Select * From Authors Order By name;» ‘формируем SQL запрос
RS.Open sSQL, Conn ‘открываем рекордсет

If RS.BOF = False Or RS.EOF = False Then ‘если в рекордсете есть записи, то
RS.MoveFirst ‘перемещаемся к первой записи
%>

Рекордсет следует использовать только если нужно получить данные из БД. Если же нужно только выполнить SQL команду действия, то рекордсет не нужен. Для выполнения SQL запроса действия используется метод Execute объекта Connection.

) ‘Получаем значение переменной id
sSQL = «Update articles Set hits=hits+1 Where > Conn.Execute sSQL ‘Выполняем запрос
Conn.Close ‘закрываем соединение
Set Conn = Nothing ‘уничтожаем соединение
%>

Включение файлов

Вы можете включать в ASP страницу код из других файлов. Для этого используется команда #include. Рассмотрим её работу на примере включения меню сайта, расположенного в файле menu.inc в ASP страницу.

Теперь в ASP странице там, где нужно поместить меню, вставляем эту строку:

Плюсы использования этой возможности ASP очевидны. В примере, расположенном выше, для изменения меню сайта не нужно править все ASP страницы, а нужно исправить только один файл menu.inc.
Все команды include обрабатываются сервером до выполнения кода. Например, следующий скрипт не сможет открыть файл Header1.inc, так как в ASP попытка выполнить команду #include будет предпринята раньше, чем имя файла будет назначено переменной name.

Возможно использование вложенных include файлов. Например в файле menu.inc имеется команда включения файла copyright.inc.
Недопустимы так называемые «перекрёстные» include файлы. Например в файле menu.inc имеется команда включения файла include.inc, а в include.inc расположена команда включения menu.inc. Такие включения не будут обработаны сервером и будет сгенерирована ошибка.
Команды и процедуры скриптов полностью должны быть заключены в ограничители сценариев , теги HTML или теги HTML . То есть, нельзя открыть ограничитель скрипта во включающем файле .asp и закрыть его во включаемом файле; скрипт или команда скрипта должны присутствовать в виде отдельных законченных модулей. Например, следующий скрипт не будет работать:

Следующий скрипт будет работать:

Обработка событий приложения

В ASP имеется четыре события, которые может обрабатывать разработчик. Это старт/стоп сессии и старт/стоп приложения. Обработчики этих событий размещаются в файле global.asa в корневом каталоге приложения. Макет этого файла:

HTTP переменные

Используя объект Request можно получить некоторые переменные, полученные от браузера. Ниже перечислены некоторые из них:

ID Имя E-mail URL
Переменная Описание
ALL_HTTP Все HTTP заголовки.
ALL_ROW Все заголовки в raw-форме. Отличие от ALL_HTTP состоит в том, что в ALL_HTTP имя заголовка стоит после HTTP_ и написано заглавными буквами. А в ALL_ROW имена заголовков передаются в таком виде, в каком они были посланы пользователем.
APPL_MD_PATH Передаёт логический путь к приложению для ISAPI DLL.
APPL_PHYSICAL_PATH Передаёт физический путь к приложению.
AUTH_PASSWORD Значение, введённое пользователем в диалог аутотентификации. Переменная доступна только если была использована аутентификация.
AUTH_TYPE Метод аутотентификации, используемый сервером для ограничения доступа пользователей к защищённому скрипту.
AUTH_USER Имя аутотентифицированного пользователя.
CERT_COOKIE Уникальный ID для сертификата клиента.
CERT_FLAGS Bit0 равен 1, если присутствует сертификат пользователя. Bit1 равен 1, если Certifying Authority пользователя недействительно (отсутствует в списке CA на сервере).
CERT_ISSUER Значение поля Issuer сертификата пользователя (O=MS, OU=IAS, CN=user name, C=USA).
CERT_KEYSIZE Размер ключа в соединении Secure Sockets Layer.
CERT_SECRETKEYSIZE Размер ключа личного сертификата сервера.
CERT_SERIALNUMBER Серийный номер сертификата пользователя.
CERT_SERVER_ISSUER Значение поля Issuer сертификата сервера.
CERT_SERVER_SUBJECT Значение поля Subject сертификата сервера.
CERT_SUBJECT Значения поля Subject сертификата пользователя.
CONTENT_LENGTH Длина данных, переданных пользователем скрипту.
CONTENT_TYPE Тип данных, переданных пользователем. Используется при запросах, как Get, Post, Put.
HTTP_ Передаёт значение заголовка HTTP_ .
Примечание: Сервер заменяет знак подчёркивания [_] в ИмяЗаголовка на тире [-]. Например, если Вы запросите заголовок HTTP_MY_HEADER, то сервер будет искать заголовок с именем HTTP_MY-HEADER.
HTTPS Возвращает ON, если запрос от пользователя был получен через защищённый канал и возвращает OFF, если запрос получен через незащищённый канал.
HTTPS_KEYSIZE Размер ключа в соединении Secure Sockets Layer.
HTTPS_SECRETKEYSIZE Количество бит в личном ключе сертификата сервера. Например, 1024.
HTTPS_SERVER_ISSUER Значение поля Issuer сертификата сервера.
HTTPS_SERVER_SUBJECT Значение поля Subject сертификата сервера.
INSTANCE_ID ID копии IIS в текстовом формате.
INSTANCE_META_PATH Metabase путь копии IIS, которая отвечает на запрос.
LOCAL_ADDR IP адрес сервера.
LOGON_USER Логин пользователя в Windows NT.
PATH_INFO Дополнительная информация о пути, переданная клиентом.
PATH_TRANSLATED Физический путь, полученный из виртуального пути PATH_INFO.
QUERY_STRING Информация запроса, находящаяся в url после знака вопроса [?].
REMOTE_ADDR IP адрес пользователя.
REMOTE_HOST Имя компьютера пользователя.
REMOTE_USER Имя пользователя, посланное пользователем.
REQUEST_METHOD Метод отправки запроса. Для HTTP это: Get, Head или Post.
SCRIPT_NAME Виртуальный путь к исполняемому скрипту.
SERVER_NAME Имя сервера, DNS или IP адрес сервера.
SERVER_PORT Номер порта сервера, на который был послан запрос.
SERVER_PORT_SECURE Если порт, на который был послан запрос, охраняется, то эта переменная будет иметь значение 1. В отличном случае — 0.
SERVER_PROTOCOL Название и версия протокола запроса информации. Имеет формат: Протокол/Версия.
SERVER_SOFTWARE Название и версия программного обеспечения сервера, которое отвчает на запрос и стартует сессию.
URL Основная часть url.

Значения HTTP заголовков получаются так же, как и другие переменные, хранящиеся в объекте Request.

Dim IP
IP = Request («REMOTE_ADDR»)
Response.Write IP

Так как все HTTP заголовки входят в коллекцию ServerVariables, можно использовать для получения их значений цикл For Each . Next.





Переменные сервера Value

Работа с почтой

Рано или поздно у разработчика ASP-приложения появляется необходимость работы с электронной почтой. Например, нужно отправить пользователю забытый пароль или направить автору вопроса на форуме ответ на него и т.д. Для этого можно воспользоваться стандартной библиотекой CDO (Collaboration Data Objects). Эта библиотека имеет очень разветвлённую объектную структуру. В этой статье мы рассмотрим только отправку сообщений с помощью CDO. Для этого используется объект Message. Мы воспользуемся такими свойствами, как From, To, Subject, BodyPar, Body, HTMLBody и одним методом Send.
Сначала, как всегда, создаём ссылку на объект.

Dim mailMessage, sBody
Set mailMessage = Server.CreateObject («CDO.Message»)

Затем заполняем поля сообщения, текст сообщения и указываем его кодировку.

mailMessage.From = «mailrobot@vbnet.ru@
mailMessage.To = «vasya@pupkin.ru»
mailMessage.BodyPart.Charset = «koi8-r»
mailMessage.Subject = «Тема собщения»
sBody = «Уважаемый Василий Пупкин!» & vbCrLf & «Вы приглашены на открытие раздела сайта VBNet.ru Справочник Visual Basic» & vbCrLf & «С наилучшими пожеланиями, Администрация VBNet.ru»
mailMessage.Body = sBody

Если Вы хотите отправить сообщение не в текстовом, а HTML формате, то нужно использовать свойство htmlBody вместо Body:

sBody = «Уважаемый Василий Пупкин!
Вы приглашены на открытие раздела сайта VBNet.ru Справочник Visual Basic
С наилучшими пожеланиями, Администрация VBNet.ru»
mailMessage.htmlBodyBody = sBody

Теперь отправляем сообщение, используя метод Send.

После того, как письмо отправлено, уничтожаем объект mailMessage для освобождения памяти.

Обращение к элементу по его >14.12.2010, 23:53. Просмотров 5825. Ответов 10

14.12.2010, 23:53

Обращение к элементу списка по его номеру
Добрый вечер! Подскажите, пожалуйста, как обратиться к элементу списка с определённым номером.

Обращение к элементу в List, зная его индекс
Здравствуйте, у меня возникла проблема создан список public List

Что быстрее? Обращение к элементу массива или к элементу структуры?
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается.

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

Обращение к элементу по ID
Здравствуйте, не пинайте сильно только начинаю изучать javascript, раньше программировал на Delphi.

14.12.2010, 23:57 2 14.12.2010, 23:58 [ТС] 3 12.12.2012, 14:50 4
12.12.2012, 14:50
12.12.2012, 15:26 5

привидение типов, и где искать этот контрол не хватает.

12.12.2012, 16:24 6

Спасибо, но не работает. Если я правильно понял в ((TextBox)this.Page.FindControl(«box» + Convert.ToString(num — 1))).Text;
(TextBox) — тип контрола ID которого («box» + Convert.ToString(num — 1)) и this.Page — место где ищем.
Искать нужно в Experience потому что код страницы :

12.12.2012, 17:04 7
17.12.2012, 11:48 8

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

Подведя итог, мне нужен способ узнать значение текстбокса, который был программно создан на странице. а не тот который статично на ней находиться. Кстати, если посмотреть на код страницы в браузере до того как я пытаюсь считать значения с текст бокса он там есть:

17.12.2012, 12:45 9
обсуждалось на форуме сотни раз. поиск рулит.
Комментарий модератора
Правила п.3.3
18.12.2012, 08:05 10
18.12.2012, 22:42 11

Потому что у вас срабатывает PostBack который заставляет заново рисовать страницу, в которой разумеется уже не будет ваших созданных кнопочек. Не нужно снова ничего рисовать — нужно в Page_Load смотреть режим обращения к странице (PostBack или нет) и не рисовать ничего снова и не затирать места где «рисуются» кнопки. Тогда все старые действия сохранятся.
При нажатии на кнопку нужно сделать так чтобы это не вызывало лавину событий в которых вы (как вы признались выше) ещё не сильно хорошо понимаете. Сделайте создание текстбоксов на JavaScripts. Тогда ваша страничка останется жива до того момента, когда вы решите нажать «красную кнопку» и прочитать/сохранить/обработать все эти значения.
Чтобы снова рисовать — нужно что-то читать по этим данным. Или из запроса придут все данные по тексбоксам (читать через Page.Form[«box0») или же создавать какие-то хранилища (типа сессий, вьюстейтов, баз данных и т.п.) Но это больше изврат.
FindControl в случае полной перерисовки страницы уже не найдёт ничего, даже если вы будете знать полное название своего текстбокса. Потому что ваших текстбоксов не будет существовать.

Все задачи «не выглядят тривиальными», просто потому что изменены условия задачи. Но в в целом все одно и тоже и методы решения одни и те же. Просто нужно применить знания в вашу ситуацию (которая с вашей стороны удобнее и понятнее смотрится, чем со стороны читателей).

Добавлено через 4 минуты

18.12.2012, 22:42
18.12.2012, 22:42

Обращение к элементу
Доброго времени суток ! Имеется код: foreach (var pb in Controls.OfType

Обращение к элементу по id
Есть одна страница. На ней есть слой с постоянно меняющимся id. Как обратиться к этому слою? id.

Обращение к элементу
Подскажите, как в Маткаде обратиться к конкретному элементу столбца. То есть есть столбец.

Http Response. Append ToLog(String) Метод

Определение

Добавляет данные пользовательского журнала в файл журнала IIS. Adds custom log information to the Internet Information Services (IIS) log file.

Параметры

Текст, добавляемый в файл журнала. The text to add to the log file.

Примеры

В следующем примере показано, как добавить строку в журнал. The following example shows how to append a string to the log.

Комментарии

Чтобы разрешить запись указанной строки в файл журнала, сначала необходимо включить параметр запрос URI в диалоговом окне свойства расширенного ведения журнала для сайта, для которого требуется вести журнал активности в службах IIS. To allow for the specified string to be recorded in the log file, you first must enable the URI Query option of the Extended Logging Properties dialog box for the site that you want to log activity for in IIS.

Чтобы настроить расширенное ведение журнала в IIS 6,0, выполните следующие действия. To customize extended logging in IIS 6.0, follow these steps:

В диспетчере служб IIS разверните узел локальный компьютер, разверните папку веб-сайт или узлы FTP, щелкните правой кнопкой мыши веб-сайт или узел FTP и выберите пункт Свойства. In IIS Manager, expand the local computer node, expand the Web or FTP Sites folder, right-click the Web or FTP site, and then click Properties.

Перейдите на вкладку веб-сайт или FTP-узел и установите флажок включить ведение журнала (если он еще не установлен). Click the Web or FTP Site tab, and then select the Enable logging check box (if it is not already selected).

В поле Формат активного журнала выберите Расширенный формат файла журнала W3C. In the Active log format box, click W3C Extended Log File Format.

Нажмите кнопку Свойства. Click Properties.

Перейдите на вкладку Дополнительно , выберите свойства, которые необходимо заносить в журнал, и нажмите кнопку ОК. Click the Advanced tab, select the properties that you want to log, and then click OK.

Почему ASP.NET не используют в крупных компаниях?

В настоящий момент С# (asp.net) имеет целый ряд преимуществ над тем, что нам дает Java (в плане удобства и синтаксиса языка). Это правда!

Проблема заключается в том, что Java появился раньше, Java был открытым для использования на Linux. В итоге под сервера на Java написали огромный список уникальных решений, которые сейчас используют топовые команды (посмотри, что такое хадуп, например). В итоге, компании либо не видели смысла переписывать все на C#, так как уже имели билды на Java, либо не хотели тратить время на разработку того, что уже есть на Java.

Именно по этой причине Microsoft сейчас активно начинает спариваться с Linux и везде кричит, что они его любят.

Аппендицит — причины, симптомы и виды

Сайт предоставляет справочную информацию исключительно для ознакомления. Диагностику и лечение заболеваний нужно проходить под наблюдением специалиста. У всех препаратов имеются противопоказания. Консультация специалиста обязательна!

Что такое аппендицит?

Аппендицит – это патология, при которой отмечается воспаление червеобразного отростка слепой кишки. Как правило, воспаление носит острый характер, но также может быть и хроническим. Это одна из самых распространенных острых хирургических патологий, частота, которой составляет 5 случаев на 1000 человек.

Острый аппендицит составляет порядка 65 – 70 процентов всех острых заболеваний органов живота. Среди всех неотложных хирургических вмешательств на долю аппендицита приходится 60 – 80 процентов. Операцию по удалению аппендикса в европейских странах переносит примерно 10 процентов населения.

Согласно статистическим данным аппендицит является проблемой, с которой чаще всего сталкиваются молодые люди. Около 75 процентов пациентов, которым удалили аппендикс – мужчины и женщины, возраст которых не достигает 35 лет. В группу самого высокого риска входят девушки и юноши в возрасте от 15 до 19 лет. Эта патология практически не встречается у детей, которым не исполнилось года, и у пожилых людей, возраст которых превышает 70 лет. После 50 лет этот недуг встречается только у 2 процентов населения.

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

Проблема аппендицита человечеству знакома с давних пор. Характерный след от разреза на животе был найден у египетской мумии, возраст которой датируется одиннадцатым веком. Первым, кто описал в своих работах червеобразный отросток слепой кишки, был Леонардо да Винчи. Официально этот орган был признан учеными спустя долгое время.
Термин «аппендицит» был предложен профессором из Америки в 1886 году в его работе на тему симптомов воспаления червеобразного отростка.

По одной из версий, причиной смерти известного иллюзиониста Гарри Гудини стал аппендицит. Один из трюков фокусника заключался в том, что он разрешал зрителям наносить себе сильные удары в живот. Гудини умел сильно напрягать пресс, в результате чего удары не приносили ему сильного дискомфорта. Однажды уставший после выступления иллюзионист разрешил ударить себя в живот одному из фанатов, который пробрался в гримерку. Вскоре после ударов Гудини стали беспокоить сильные боли в животе, и спустя некоторое время фокусник умер от перитонита, причиной которого был лопнувший из-за удара аппендицит.

Причины аппендицита

Анатомия аппендикса

Аппендикс (синоним червеобразный отросток) представляет собой придаток слепой кишки. Размеры отростка колеблются от 3 до 9 сантиметров в длину (крайне редко могут достигать 20 сантиметров) и от 5 до 8 миллиметров в диаметре. Внутри отростка находится узкая полость, заполненная лимфатической тканью. У детей отросток шире, чем у взрослых. В своем строении аппендикс повторяет стенки тонкого кишечника.

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

Причины развития острого аппендицита

В основе развития воспаления лежит действие патогенных микроорганизмов и определенных «пусковых факторов». В качестве патогенных микроорганизмов выступает кишечная условно-патогенная флора и гноеродные микроорганизмы.

Микроорганизмы, участвующие в развитии аппендицита

Название группы и место обитания

Условно-патогенная флора кишечника, которая в норме присутствует в просвете червеобразного отростка, но не причиняет вреда. Под действием пусковых факторов представители этой флоры активизируются, становясь патогенными.

Гноеродная флора, которая под действием пусковых факторов провоцирует гнойное воспаление.

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

  • кишечная палочка;
  • энтерококк;
  • эшерихии;
  • псевдомонады;
  • клебсиеллы.
  • шигеллы – микробы, вызывающие дизентерию;
  • сальмонелла тифи – вызывает брюшной тиф;
  • микобактерии туберкулеза – вызывают туберкулез (в данном случае кишечника).

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

Теориями развития аппендицита являются:

  • механическая теория;
  • нервно-рефлекторная теория;
  • аллергическая теория;
  • сосудистая теория.

Механическая теория развития аппендицита
Эта теория является наиболее распространенной, так как согласно данным многочисленных исследований аппендицит развивается вследствие обструкции (закупорки) просвета червеобразного отростка. Это нарушает процесс дренирования аппендикса и ведет к резкому повышению давления внутри него. Наблюдаются явления капиллярного и венозного застоя, развитие ишемии. На фоне этого начинает активизироваться условно-патогенная флора аппендикса. Из-за отсутствия дренирования количество бактерий растет. Рост числа бактерий на фоне венозного застоя и ишемии запускает воспалительный процесс в червеобразном отростке.

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

Механическими факторами, способными вызвать обтурацию просвета аппендикса, являются:

  • гельминты – например, клубок аскарид может закупорить просвет кишки;
  • каловые камни – часто встречаются у пожилых людей;
  • спайки и рубцовые сращения;
  • карциноид (медленнорастущая опухоль) червеобразного отростка;
  • увеличенные лимфатические узлы также могут закрывать просвет аппендикса.

Нервно-рефлекторная теория развития аппендицита
В основе этой теории лежит функциональный спазм артерий, питающих червеобразный отросток. Резкий спазм (сужение) кровеносных сосудов приводит к расстройствам кровоснабжения и питания аппендикса. Это, в свою очередь, ведет к нарушению оттока лимфы и венозной крови (развивается застой), а также к трудностям дренирования. На фоне венозного застоя наблюдаются дистрофические изменения, которые приводят к снижению защитного барьера слизистой. Ослабление защитных свойств является главным пусковым механизмом, который приводит к активации условно-патогенной флоры и развитию неспецифического воспаления в червеобразном отростке.

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

Согласно аллергической теории аппендицита, при третьей и четвертой реакции гиперчувствительности имеет место ослабление защитного барьера слизистой червеобразного отростка. Это сопровождается проникновением дополнительного количества условно-патогенных бактерий из слепой кишки в просвет аппендикса. Ослабление защитных свойств с одной стороны и повышенная концентрация бактерий с другой составляет основу для развития воспаления.

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

Помимо основных вышеперечисленных теорий существует и алиментарная (пищевая) теория аппендицита. Согласно ей у людей, злоупотребляющих мясной пищей с низким содержанием растительных волокон, риск развития аппендицита гораздо выше. По мнению ученых именно такой рацион провоцирует развитие «ленивого кишечника». При этом синдроме транзит кишечного содержимого существенно уменьшается, что обуславливает его застой. Длительные запоры, которые при этом формируются, ведут к снижению защитных свойств слизистой оболочки и стимулируют активацию патогенной флоры.

Признаки острого аппендицита

Симптомами острого аппендицита являются:

  • боль;
  • повышенная температура;
  • нарушение стула и мочеиспускания.

Боль при аппендиците

Боль – это доминирующий признак острого аппендицита. Чаще всего боль появляется внезапно ночью или во второй половине дня, ближе к вечеру. При этом болевой синдром носит постоянный характер, то есть боль ощущается пациентом постоянно. Чаще всего болевой синдром умеренной выраженности. Поскольку боль обусловлена воспалительным процессом, то случаи острых и «невыносимых» болей крайне редки. В то же время, не стоит забывать что боль – это больше субъективный симптом и зависит он как от индивидуальной болевой чувствительности, так и от типа личности пациента.

Для острого аппендицита характерна определенная миграция болей. Так, в первые часы заболевания боль локализуется в эпигастральной области или же носит разлитой характер (пациент ощущает боли по всему животу). У детей и подростков боль вначале заболевания может сосредотачиваться около пупка. Через несколько часов болевые ощущения спускаются в правую подвздошную ямку. С этого момента пациент жалуется на боль в правом нижнем боку. Такая миграция болевого симптома из эпигастрия в правую подвздошную область именуется симптомом Кохера. Данный диагностический признак говорит в пользу острого аппендицита, но также может указывать и на другие хирургические патологии (например, на перфоративную язву желудка).

С какой стороны локализуется аппендицит?

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

Варианты положения червеобразного отростка и локализация болей при этом

Название атипичного положения

Вариант расположения аппендикса

Аппендикс находится за слепой кишкой.

Боль локализуется также справа, но носит она приглушенный и тупой характер.

Восходящее (или же подпеченочное) положение

Червеобразный отросток направлен не вниз, а вверх.

Болевой синдром ощущается пациентом справа, но не внизу живота, в верхней его части. Иногда боль локализуется под реберной дугой, непосредственно под печенью.

Аппендикс располагается в малом тазу.

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

Наблюдается крайне редко при левостороннем положении слепой кишки.

Боли локализуются в левой подвздошной ямке, то есть внизу живота слева.

Червеобразный отросток смещен к срединной линии.

Боли отличаются своей выраженной интенсивностью и бурным началом. Сначала они носят разлитой характер, а потом сосредотачиваются около пупка. Аппендикулярные симптомы выражены максимально.

При атипичном положении червеобразного отростка боли могут иррадиировать (отдавать) в поясничную, паховую или ректальную область.

Температура и другие общие симптомы при остром аппендиците

Повышенная температура при остром аппендиците является проявлением общего интоксикационного синдрома. В 8 случаев из 10 наблюдается повышение температуры тела в пределах 37 – 38 градусов. В редких случаях температура поднимается выше 38 градусов или же остается в пределах нормы.
Повышенной температуре сопутствует слабость, вялость, ощущение разбитости. Нередко она сопровождается тошнотой и однократной рвотой. Рвота в целом не характерна для аппендицита и может наблюдаться максимум два раза. При этом она носит рефлекторный характер и не приносит облегчения.

Все вышеописанные симптомы являются следствием формирования инфекционного очага в червеобразном отростке. Этот очаг является результатом инфильтрации (пропитывания) стенок аппендикса вирулентными бактериями. Изначально инфекционный очаг небольшой и общие симптомы развиваются вследствие рефлекторно-висцеральных реакций. Подобная реакция пищеварительного тракта на рядом расположенный воспалительный процесс обуславливает такие общие симптомы как сухость во рту, повышенная температура, рефлекторная рвота, умеренное вздутие живота. Состояние пациента при этом оценивается как умеренное. Позднее, при развитии многочисленных осложнений и распространении инфекционного процесса, симптомы прогрессируют уже на фоне эндогенной интоксикации.

Нарушение стула и мочеиспускания при остром аппендиците

Перитонит и другие осложнения при остром аппендиците

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

Осложнениями при аппендиците являются:

  • перитонит;
  • аппендикулярный инфильтрат;
  • абсцесс.

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

Главным симптомом является боль. Но в отличие от аппендицита боли не имеют четкой локализации, а носят разлитой характер. Интенсивность болей очень сильная, невыносимая. Пациент находится в характерной для перитонита позе эмбриона – лежа на боку с согнутыми в коленях и подведенными к животу ногами. Кожные покровы пациента бледные, иногда даже мраморные. Выраженному болевому синдрому сопутствует многократная рвота, которая не приносит облегчения, падение артериального давления, частый пульс, повышение температуры тела до 39 градусов.

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

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

Аппендикулярный инфильтрат
Инфильтратом называется конгломерат спаянных между собой органов, которые окружают аппендикс. Таким образом, аппендикулярный инфильтрат включает в себя слепую кишку, часть сигмовидной кишки, большой сальник, а иногда и придатки матки (яичники, маточные трубы). Развивается данный инфильтрат как защитная реакция на распространение воспалительного процесса. Когда аппендикс лопается, находящееся в нем содержимое попадает в брюшную полость. Чтобы оно не распространялось далее на всю брюшную полость с развитием разлитого перитонита, воспалительный процесс локализуется вышеперечисленными органами.

Развивается инфильтрат на пятый день от начала заболевания. Изначально клиническая картина повторяет симптомы острого аппендицита — присутствует боль, умеренное повышение температуры. Однако на 2 – 3 день от начала заболевания боли начинают стихать, температура снижается до нормы. На 4 – 5 день на фоне слабовыраженного болевого синдрома в правой подвздошной области пальпируется (ощупывается) плотное, болезненное и малоподвижное образование. Если врач пальпирует такого рода образование у пациента, то необходимо провести дифференциальную диагностику с опухолью слепой кишки.

Лечение инфильтрата полностью консервативное, то есть только на основе медикаментов. Назначается постельный режим, диета и антибиотикотерапия. Ввиду повышенного риска рецидива (повторного обострения) после 3 месяцев консервативного лечения показано удаление аппендикса.

Абсцесс
Абсцессом называется ограниченное скопление гноя. Он может развиваться как при остром аппендиците, так и при хроническом. Локализация абсцесса зависит от изначального положения червеобразного отростка. Так, абсцесс может быть тазовым, поддиафрагмальным или межкишечным. Чаще всего встречается тазовый абсцесс, поскольку гнойный экссудат под действием силы тяжести скапливается в самых нижних отделах. Боли при тазовом абсцессе локализуются в области промежности. Сопровождаются они ложными позывами к дефекации и затрудненным мочеиспусканием.

Поддиафрагмальный абсцесс локализуется в верхних отделах эпигастрия, под диафрагмой. Боли при этом располагаются в нижней части грудной клетки. Они усиливаются при глубоком вздохе, кашле, одышке. При межкишечном абсцессе боли ощущаются пациентом глубоко внутри живота. Из-за спаивания между собой петель кишечника может наблюдаться кишечная непроходимость, при которой отмечаются длительные запоры.
Лечатся абсцессы исключительно оперативным методом путем вскрытия гнойника через разрез на передней брюшной стенке.

Хронический аппендицит

Хронический аппендицит представлен длительным вялотекущим воспалительным процессом в червеобразном отростке. Из всех диагностируемых патологий аппендикса хроническая форма встречается примерно в одном проценте случаев и обнаруживается чаще у молодых женщин. Из-за стертой клинической картины со слабовыраженными симптомами заболевания обнаружение хронического аппендицита затруднено.
В зависимости от этиопатогенеза (причины и механизма развития) выделяют три формы хронического воспаления червеобразного отростка.

К патогенетическим формам хронического аппендицита относятся:

  • первичная форма;
  • резидуальная (остаточная) форма;
  • рецидивирующая форма.

Первичная форма хронического аппендицита
Первичная форма хронического аппендицита является вялотекущим воспалением отростка, которое развивалось с самого начала болезни. В условиях сниженной иммунной защиты организма воспалительные процессы слабо выражены. Это объясняет отсутствие острых приступов аппендицита.

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

Рецидивирующая форма хронического аппендицита
Рецидивирующая форма хронического аппендицита может появиться после перенесенной операции по удалению червеобразного отростка. Воспалительный процесс развивается в культе червеобразного отростка и нередко переходит на слепую кишку и окружающие ткани. Рецидивы (повторные обострения) обычно наблюдаются, когда оставшаяся культя отростка длиннее 2 сантиметров.
Существует множество факторов риска, которые способствуют развитию хронических форм аппендицита.

К факторам риска развития хронического аппендицита относятся:

  • переохлаждение организма;
  • психоэмоциональный стресс;
  • ожирение;
  • курение;
  • злоупотребление алкоголем;
  • неправильное питание;
  • высокая физическая нагрузка;
  • запоры;
  • хронические болезни (сахарный диабет, гепатиты);
  • возрастная группа старше 70 лет и младше 2 – 3 лет.

Причины развития хронического аппендицита

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

Спаечный процесс может присутствовать как между органами брюшной полости, так и внутри самого аппендикса, вызывая его деформацию и облитерацию (закупорку просвета). Исходя из этого, выделяют несколько морфологических форм хронического аппендицита.

Морфологическими формами хронического аппендицита являются:

  • водянка червеобразного отростка;
  • мукоцеле червеобразного отростка;
  • эмпиема червеобразного отростка;
  • фибропластический аппендицит.

Эмпиема, водянка и мукоцеле червеобразного отростка образуются в результате облитерации его проксимальной части или выхода в слепую кишку. Из-за отсутствия пути эвакуации в аппендиксе накапливаются различные патологические жидкости и выделения. Если в отростке накапливается транссудат (жидкость, выделяемая клетками при воспалении), то развивается водянка. Когда в полости аппендикса доминирует слизь, выделяемая эпителиальными клетками, появляется мукоцеле. При активации кишечной микрофлоры и развития инфекции, в полости накапливается гной. В этом случае хронический аппендицит принимает форму эмпиемы червеобразного отростка.

Фибропластический аппендицит представляет собой разрастание фиброзной ткани в стенке аппендикса. Это ведет к ее утолщению и увеличению отростка.

Признаки хронического аппендицита

Клинические признаки хронического аппендицита достаточно изменчивы и полиморфны, но в целом составляют картину вялотекущей формы воспаления червеобразного отростка. Приступы обострения и периоды ремиссий, которыми они постепенно сменяются, проявляются своими характерными симптомами заболевания.

Симптомами приступов обострения хронического аппендицита являются:

  • боль в правой подвздошной области, усиливающаяся в случае повышения внутрибрюшного давления;
  • рези в области живота;
  • тошнота;
  • рвота;
  • диарея;
  • периодический метеоризм;
  • температура тела в пределах 37,5 градусов.

Главным симптомом, который способствует обращению за врачебной помощью, становится боль. Боль может быть постоянной или приступообразной. Эпицентр боли располагается в подвздошной области справа или около пупка. Иногда волны боли распространяются в поясницу, пах или в правую ногу. Болевые ощущения усиливаются, когда возрастает внутрибрюшное давление, давящее на воспаленный отросток. Это происходит при физических нагрузках, кашле, чихании, процессе дефекации.

Неправильное питание также приводит к усилению болевого синдрома. У пациентов женского пола обострения могут наступать в периоды менструаций.

К симптомам периода ремиссии хронического аппендицита относятся:

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

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

Объективные симптомы хронического аппендицита

Пальпация правой подвздошной области приводит к иррадиации (отдаче) боли в противоположную сторону.

Перемещение больного в положение лежа на левый бок приводит к возникновению или усилению болевого синдрома в области воспаленного аппендикса.

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

Если поднять выпрямленные в коленных суставах ноги и удерживать некоторое время, то правая нога начинает уставать быстрее.

Пальпация передней стенки живота выявляет разницу в тонусе мышц правой и левой части.

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

Аппендицит у детей

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

При малейшем воспалении жидкость, которая скапливается в просвете отростка, с трудом отходит из него. Это создает условия для ее застаивания и воспаления. У детей же условий для застоя практически нет, так как слепая кишка, воронкообразно сужаясь, сразу переходит в аппендикс. Между ними нет даже сфинктера, который имеется у взрослых. Именно поэтому случаи острого аппендицита у детей до 4 – 5 лет исключительно редки. Однако с возрастом эти анатомические особенности претерпевают изменения, и уже к 7 годам червеобразный отросток у детей становится идентичным взрослому.

Симптомы острого аппендицита у детей

Начинается болезнь внезапно с резкого ухудшения самочувствия ребенка и повышения температуры до 38 – 39 градусов (в то время как для взрослых характерен только субфебрилитет, то есть не очень сильное повышение температуры). Отмечается многократная рвота, расстройство кишечника в виде частого и жидкого стула. Все эти симптомы (рвота, температура, понос) наводят врача на мысль о кишечной инфекции.

Специфическая симптоматика острого аппендицита у детей также обусловлена наличием абдоминального синдрома. Этот синдром встречается не только при аппендиците, но и при пневмонии, гриппе, скарлатине и других заболеваниях. Проявляется он очень сильными и разлитыми (по всему животу) болями. У маленьких детей боли часто сконцентрированы около пупка, что опять же затрудняет быструю диагностику острого аппендицита.

Симптомами острого аппендицита у детей являются:

  • частый, жидкий и неоформленный стул;
  • многократная рвота;
  • сильная, разлитая боль по всему животу либо боль возле пупка;
  • повышение температуры до 39 градусов;
  • сильное вздутие живота.

Частый и жидкий стул, рвота, сильные абдоминальные боли объясняются повышенной реактивностью кишечника на острый процесс. Кишечник начинает сильно перистальтировать и «капризничать». В результате активного перистальтизма повышается газообразование в кишечнике, поэтому живот становится вздутым и напряженным. Интенсивное движение кишечника также обуславливает его быстрое опорожнение, результатом чего является расстройство стула.

Особенности клинической картины острого аппендицита у детей

Кроме преобладания общей симптоматики над местной, острый аппендицит у детей характеризуется рядом особенностей.

К особенностям развития острого аппендицита у детей относятся:

  • наличие «светлого промежутка»;
  • атипичные положения червеобразного отростка;
  • выраженный интоксикационный синдром.

Наличие «светлого промежутка»
Светлым промежутком называется период времени, для которого характерно резкое исчезновение всех симптомов. Развивается он в период между разрывом аппендикса и развитием перитонита. Изначально клиническая картина ничем не отличается — присутствуют интенсивные разлитые боли, многократная рвота, повышенная температура.
Не оказанная вовремя помощь приводит к разрыву червеобразного отростка и развитию перитонита. Однако после разрыва аппендикса все боли исчезают, и наступает период затишья. Кажется, будто бы ребенок выздоравливает, что является серьезным заблуждением. Через 10 — 12 часов развивается клиника местного или разлитого перитонита с развитием многочисленных осложнений. Объясняется феномен светлого промежутка омертвением нервных окончаний в аппендиксе, в результате чего и отсутствуют боли при его деструкции.

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

Выраженный интоксикационный синдром

Диагностика острого аппендицита у детей

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

Осматривать ребенка необходимо в теплом помещении, после того как с ним был установлен хотя бы незначительный контакт. Пальпировать также необходимо теплыми руками, чтобы не спровоцировать дополнительный стресс для ребенка. Однако непосредственно перед пальпированием необходимо обратить внимание на положение ребенка в кровати. Как правило, они лежат на правом боку с приведенными к животу ногами. Дети спокойные, не мечутся (только если это не малыш 4 – 5 лет), но при попытке взять их на руки они оказывают сопротивление. Объясняется это тем, что поднятие ребенка провоцирует усиление болей в животе.

Для аппендицита не характерно возбуждение ребенка, когда он крутится, вертится, лезет на кушетку и слезает с нее. Если ребенок проявляет такое поведение, то аппендицит в таком случае исключается. Врач осматривает не только живот, но и всего ребенка в целом. Кожные покровы осматриваются на предмет сыпи, горло на предмет воспаления, легкие прослушиваются на наличие хрипов. Это делается для проведения дифференциальной диагностики. Необходимо помнить, что абдоминальный синдром сопутствует большинству детских заболеваний.

Пальпация живота не сопровождается вопросами «больно ли?», ведь, как правило, ответ написан на лице ребенка. Также ответы детей часто бывают необъективными, они могут повторять за врачом любой вопрос — «больно?» — «больно», «не больно?» — «не больно». Большинство детей панически боятся больницы и поэтому скрывают свои жалобы, только бы поскорей избавится от врача.

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

При остром аппендиците живот ребенка умеренно вздут, а в правом нижнем отделе отмечается умеренное напряжение мышц. Потом необходимо попросить ребенка повернуться на левый бок и внимательно следить за тем как он это делает. Если при этом он кряхтит и держится рукой за правый бок, то это считается положительным симптомом Ровзинга (данный симптом говорит в пользу аппендицита).

Симптом раздражения брюшины (симптом Щеткина-Блюмберга) – редко удается выявить у детей, поскольку ребенок не может сказать, когда у него больше болит – до или после надавливания. Более того, часто при попытке надавливания на правую подвздошную ямку, ребенок отталкивает руку врача. Зато у детей нередко удается выявить другой аппендикулярный симптом – симптом подтягивания ножки. Проявляется он в том, что когда врач надавливает на правую подвздошную область, ребенок не только пытается оттолкнуть руку врача, но одновременно и подтягивает правую ножку к животу.

Аппендицит у беременных женщин

Симптомы острого аппендицита у беременных женщин

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

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

Диагностика острого аппендицита при беременности

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

Пальпация беременной пациентки с подозрением на аппендицит проводится в положении лежа на левом боку. Это позволяет с большей вероятностью спровоцировать локальную болезненность в правой подвздошной области. Большое диагностическое значение приобретает ультразвуковое исследование (УЗИ). Оно помогает исключить другую хирургическую патологию и угрозу прерывания беременности. Для более четкой визуализации червеобразного отростка сегодня применяется метод дозированной компрессии линейным датчиком в правом нижнем квадрате живота (место локализации аппендикса). Это метод позволяет выявить воспаление отростка еще до развития деструктивных осложнений. Тем не менее, метод дозированной компрессии не позволяет диагностировать со 100 процентной точностью острый аппендицит у беременных.

Поэтому большее значение в диагностике приобретает экстренная лапароскопия. Еще до недавнего времени беременность была противопоказанием к лапароскопии. Однако если сопоставить риски осложнений после лапароскопии и при хирургическом вмешательстве, то диагностическая лапароскопия является наиболее предпочитаемым вариантом. Частота осложнений при проведении этой процедуры составляет менее 0,75 процентов, тогда как проведение операций в 25 процентах осложняется преждевременными родами. В то же время, если не предпринимать ни диагностической лапароскопии, ни оперативного вмешательства, разрыв аппендикса ведет к серьезным (иногда летальным) осложнениям в 100 процентах случаев.

Осложнения острого аппендицита при беременности

Даже вовремя диагностированный и прооперированный острый аппендицит влечет за собой последствия для мамы и плода. Так, риск преждевременных родов при неосложненном аппендиците составляет от 2 до 12 процентов, тогда как при разрыве аппендикса достигает 50 процентов. Уже после аппендэктомии существует риск развития инфекционных осложнений.

Осложнениями острого аппендицита при беременности являются:

  • инфекционные процессы — при катаральном аппендиците встречаются в 15 процентах случаев, при разрыве аппендикса — в 90;
  • кишечная непроходимость – 20 процентов случаев;
  • преждевременное прерывание беременности после аппендэктомии – 25 процентов;
  • материнская летальность – 16 процентов при разрывах аппендикса и перитоните, 0 процентов при неосложненном аппендиците.

Виды и стадии аппендицита

Существует несколько видов аппендицита, которые, по сути, являются его стадиями. Известно, что острый аппендицит в своем развитии проходит четыре стадии — катаральную (отечную), гнойную, флегмонозную и стадию разрыва. Для каждой из этих стадий характерны свои клинические проявления. С первыми двумя стадиями врачи-хирурги встречаются чаще, последняя стадия (стадия разрыва) сопровождается развитием многочисленных осложнений.

Стадиями острого аппендицита являются:

  • катаральный аппендицит;
  • гнойный аппендицит;
  • гангренозный аппендицит;
  • стадия разрыва аппендикса.

Катаральный аппендицит

Эта форма аппендицита характеризуется развитием отека (катар – означает отек, отсюда и название) в слизистой аппендикса. Слизистая оболочка отекает, утолщается, в результате чего просвет аппендикса сужается. Из-за этого сам отросток увеличивается в размерах, а давление в нем повышается. Это провоцирует развитие умеренного болевого синдрома и незначительных диспепсических расстройств — сухости во рту, легкой тошноты, вздутия. Дальнейшее развитие воспалительного процесса может происходить по двум вариантам. В первом случае воспалительный процесс самоликвидируется и не развивается далее. Данный вариант отмечается при хорошем и крепком иммунитете, когда организм способен мобилизовать все свои силы и устранить воспаление. Во втором случае воспалительный процесс продолжается и переходит во вторую стадию. Длительность катарального аппендицита составляет до 6 часов.

Из-за стертых симптомов, неярко выраженной клинической картины и отсутствия аппендикулярных симптомов диагностика аппендицита на этой стадии затруднена. Лабораторные исследования выявляют умеренный лейкоцитоз (до 12 x 10 9 ) и повышение СОЭ (скорости оседания эритроцитов).

Гнойный аппендицит

Данная стадия характеризуется развитием гнойного воспаления в стенках аппендикса. Воспалительный процесс при этом ограничивается не только слизистой оболочкой, но и охватывает другие слои отростка. В самой же полости скапливается гной, который постепенно пропитывает весь аппендикс. В результате этого он еще больше увеличивается в размерах и становится напряженным. Это обуславливает усиление болевого синдрома. Также из-за того, что воспаление перекидывается на брюшину, боль перестает быть разлитой и сосредотачивается в правой подвздошной ямке. В то же время, гнойный процесс становится причиной таких симптомов как повышение температуры, озноб, слабость. Поэтому симптомами гнойного аппендицита являются лихорадка, тошнота, боли справа и внизу живота. Развивается гнойный аппендицит спустя 6 – 24 часа после начала заболевания.

Из-за того что воспалительный процесс охватывает все слои аппендикса и перекидывается на брюшину, в клинической картине появляются симптомы раздражения брюшины. Это, а также лабораторные данные (выраженный лейкоцитоз) облегчают диагностику аппендицита на данной стадии.

Гангренозный аппендицит

Гангренозный аппендицит развивается на 2 – 3 сутки от начала заболевания, то есть спустя 24 – 72 часа. На этой стадии происходит некроз (омертвение) слоев аппендикса, а также проходящих в нем нервных окончаний и сосудов. Иногда в этот период может отмечаться регрессия всех симптомов, а именно — боли, тошноты, рвоты. Создается впечатление, что больной выздоравливает. Данный момент в клинической картине называется еще периодом «мнимого благополучия» или же периодом «светлого окна». Объясняется он тем, что вместе со всеми оболочками некрозу подвергаются и нервные окончания. Это и обуславливает уменьшение болевого синдрома.

На самом же деле в данный момент больной начинает резко слабеть. Омертвевшие ткани распадаются на клетки (продукты распада), а те с током крови разносятся по всему организму. В результате этого развивается мощная интоксикация организма. Температура тела достигает 39 – 40 градусов, давление падает менее 90 миллиметров ртутного столба, а пульс учащается более 100 ударов в минуту. Однако иногда температура у пациентов с гангренозной формой аппендицита может и отсутствовать. При этом наблюдается симптом «токсических ножниц», когда на фоне нормальной температуры пульс достигает 120 ударов в минуту. Несмотря на то, что боль немного приглушается, пациент очень слаб. Он страдает от многократной рвоты, которая не приносится ему облегчения. Частая рвота становится причиной обезвоживания организма.

При осмотре пациента выявляются бледно-серые кожные покровы, сухой и обложенный серым налетом язык. Мышечное напряжение распространяется на весь живот, а перистальтика кишечника отсутствует. Это делает живот пациента не только болезненным, но еще твердым и вздутым.
Данная форма аппендицита может привести к летальным осложнениям, таким как сепсис и септический тромбофлебит. Если пациента на данной стадии экстренно не прооперировать, то аппендикс лопается, и его гнойное содержимое попадает в брюшную полость.

Стадия разрыва аппендикса

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

При перитоните состояние пациента доходит до критического — давление падает, пульс учащается, а сознание затуманивается. Нередко пациенты становятся заторможенными, лежа в постели не в состоянии ответить на вопросы. Кожа становится бледно-серой, язык покрывается коричневым налетом. Несмотря на такое критическое состояние отмечается ослабление болевого синдрома, что является неблагоприятным признаком.

Илон Маск рекомендует:  Компьютерные сети
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL