Может быть Вы задавались вопросами что такое «WEB»?
А может быть тем что же такое «Интернет»? Без предвзятостей.
Ландж блог о четвертой среде обитания, найти ответы на многие вопросы...
«Почемучка», только об «Всемирной Паутине» и очень странная. :)
Многие знают о том, что SOAP-заголовки используются для размещения метаданных, относящихся к телу сообщения. Среда ASP.NET предоставляет механизм для определения и обработки SOAP-заголовков. В этом разделе объясняется, как формально определять SOAP-заголовки, которые предоставляются Web-сервисом ASP.NET . Здесь также показано, как обрабатывать SOAP-заголовки, полученные от клиента. Можно определить новый заголовок, который наследуется от класса SoapHeader. Этот заголовок связывается с определенной конечной точкой внутри Web-сервиса, используя атрибут. По умолчанию, классу, наследнику SoapHeader, присваивается имя корневого элемента заголовка и любые объявленные как public поля или свойства, предоставляемые классом, будут определять элементы внутри заголовка.
Многие знают такой момент, когда котировки цен, поступающие на Web от других сервисов, зачастую отстают по времени и предоставляются с двадцатиминутным запозданием. Котировки, полученные с помощью Web-метода instantQuote, не подвержены такому запаздыванию. Поскольку Web-метод instantQuote получает цену акции, по которой в настоящий момент осуществляются торги на бирже, то, по всей видимости, можно запрашивать с клиентов полтора доллара за каждую котировку. Таким образом, необходимо обеспечить, чтобы каждый SOAP-запрос к Web-методу instantQuote сопровождался SOAP-заголовком Payment, который содержит информацию о кредитной карте клиента. Эта информация будет использована для получения полутора долларов за транзакцию.SOAP-заголовки определяются классами, которые наследуются от класса SoapHeader. Элементы заголовка определяются общедоступными (public) полями или свойствами read/write.
Приведенное определение класса задает SOAP-заголовок с именем Payment и четырьмя дочерними элементами: nameOnCard, creditCardNumber, creditCardType И expirationDate. Атрибут XmlRoot используется ДЛЯ ТОГО, чтобы XML Serializer именовал элемент заголовка Payment, а не имя класса. После того как платежи получены и Web-метод выполнен, необходимо послать заголовок, содержащий подтверждение покупки, обратно клиенту. SOAP-заголовки, которые отправляются от сервера клиенту, определяются тем же способом. Следующий код описывает заголовок, который содержит размер оплаты, а также номер транзакции по кредитной карте. Как только заголовки определены, следующим шагом будет их ассоциирование с Web-методом instantQuote. Для этого используется атрибут SoapHeader. К классу webService добавлена переменная класса, декларированная как public, для хранения экземпляра класса, порожденного от класса SoapHeader. Имя этой переменной затем сообщается ASP.NET в атрибуте SoapHeader.
Далее приведено определение класса securities. Здесь созданы две переменные класса для хранения данных, содержащихся в SOAP-заголовках, - Payment (Платеж) и Receipt (Чек). Создан экземпляр класса soapReceiptHeader, так заголовок Receipt будет передаваться клиенту. Экземпляр класса SoapPaymentHeader не создается, т. к. за формирование этого объекта и заполнение его свойств данными, содержащимися в заголовке Payment, полученными от клиента, отвечает ASP.NET .Затем добавляются два атрибута SoapHeader для объявления, что заголовки должны быть явно описаны, как часть Web-метода. Конструктор атрибута soapHeader получает строку, содержащую имя (переменной класса, декларированной как public), которая должна быть ассоциирована с SOAP-загол обком.Вдобавок установлены два необязательных свойства: Direction (Направление) и Required (Обязательный). Свойство Direction показывает, кто предположительно посылает заголовок: клиент или сервер. Свойство Required показывает, должен ли заголовок входить в SOAP-сообщение.
Обсудим подробно каждое из этих свойств. Свойство Direction показывает, получено ли сообщение от клиента, послано ли оно клиенту, или то и другое вместе. Заголовок Payment получается от клиента, а заголовок Receipt посылается клиенту, поэтому свойство Direction ДЛЯ НИХ устанавливается в SoapHeaderDirection.In и в soapHeaderDirection.Out соответственно. Если SOAP-заголовок получен от клиента и затем возвращен ему, то значение свойства Direction должно устанавливаться в SoapHeaderDirection.InOut. Свойство Required показывает, должен ли заголовок включаться в SOAP-сообщение, рассматриваемое Web-сервисом как корректное (valid). Если свойство Required внутри тега attribute не установлено, то его значение по умолчанию true.
Входные заголовки, помеченные как обязательные, должны включаться в сообщение-запрос. В противном случае ASP.NET будет возбуждать исключение SoapException. Поскольку заголовок Payment должен включаться в каждый запрос, а соответствующий заголовок Receipt в каждый ответ, то свойство Required установлено равным true для обоих SOAP-заголовков. Свойство Required не связано с обработкой заголовка получателем сообщения и даже его распознаванием. Например, заголовок Receipt должен всегда возвращаться клиенту, но от клиента не требуется обработки этого заголовка.
Теперь следует ассоциировать заголовки Payment и Receipt с Web-методом, далее необходимо будет обработать заголовки Payment. Следующий код использует информацию в заголовке Payment, чтобы выставить счет на клиентскую кредитную карточку, используя любой компонент обработки кредитной карты. Приведенный код использует информацию заголовка Payment, для получения платы с кредитной карточки клиента. Если кредитная карта успешно обработана, заголовок Receipt будет заполнен соответствующим номером транзакции, а также размером платежа по данной кредитной карте. Если кредитная карта обработана некорректно, то возбуждается исключение SoapException.
Поскольку исключение - это результат получения некорректной информации от клиента, коду ошибки присваивается значениеClient. Такая реализация имеет одну проблему, относящуюся к обработке заголовков. Нужно отметить, что клиент имеет возможность посылать дополнительные заголовки, отличные от ожидаемых. В этих дополнительных заголовках клиент может к тому же установить атрибут mustunderstand равным true. В дальнейшем будет вкратце рассказано, как обрабатывать такие дополнительные заголовки. Но, прежде всего, необходимо обсудить установку и анализ атрибута mustunderstand для отдельного SOAP-сообщения.
Свойство Mustunderstand, предоставляемое классом SoapHeader, в корне отличается от свойства Required, установленного атрибутом SoapHeader. Свойство Required определяет, должен ли заголовок включаться в сообщение. Если заголовок помещен в сообщение, то свойство Mustunderstand используется, чтобы указать, должен ли получатель сообщения распознать и обработать заголовок.
Обсудим оба эти свойства подробно. Свойство Required определяет, должен ли заголовок включаться в сообщение обмена между клиентом и сервером для определенного Web-метода. Так как это свойство специфично для интерфейса Web-сервиса, то изменения в нем отражаются в WSDL-документе. Если свойство Required принимает значение true, то атрибут required элемента header, определенного элементами расширения SOAP-связывания, будет установлен равным true. Наконец, если Web-метод определяет SOAP-заголовок как обязательный (required), то ASP.NET не сможет поддерживать связывания HTTP GET/POST. Свойство Mustunderstand устанавливает, должен ли определенный заголовок в сообщении быть распознан и обработан клиентом. Поскольку это свойство специфично для конкретнрго обмена между клиентом и сервером, то изменения в нем отражаются и в самом SOAP-сообщении. Если свойство Mustunderstand имеет значение true, то атрибут mustunderstand в экземпляре заголовка будет также установлен равным true. Свойство Didunderstand объекта, унаследованное от SoapHeader, предлагает платформе ASP.NET сообщить клиенту, какие заголовки были обработаны Web-методом.
Для заголовков, явно определенных Web-методом, значение свойства Didunderstand по умолчанию - true, поэтому необходимо убедиться, что нет участков кода, в которых метод возвращается без обработки заголовков. Клиент может установить атрибут mustunderstand равным true. В таком случае, если Web-метод не возбуждает исключение SoapException, это рассматривается как ошибка. Если заголовок не обработан, можно установить значение свойства Didunderstand равным false в начале Web-метода. После того как заголовок обработан, свойству Didunderstand опять присваивается значение true.
Другой способ состоит в том, чтобы включить значение свойства Mustunderstand в принятие решения об обработке заголовка. Например, метод instantQuote устанавливает свойство Required заголовка Payment, равным true. Однако метод instantQuote отвечает за обработку заголовка только в том случае, если свойство Mustunderstand имеет значение true. Если, скажем, администратор инициирует Web-метод instantQuote, то заголовок Payment не должен обрабатываться, если свойство Mustunderstand не равно true, как в приводимом примере. Надо поставить еще одну, последнюю, точку в обсуждении свойств Mustunderstand и Didunderstand.
После возврата из Web-метода ASP.NET определит, содержат ли заголовки, посланные клиентом, атрибут mustunderstand со значением true, а также ассоциированное с ним свойство Didunderstand со значением false. В этом случае ASP.NET автоматически возбудит исключение SoapException. Web-метод должен содержать код, который попытается отменить действия со стороны клиента перед возбуждением исключения. Поскольку это исключение возбуждается после возврата из Web-метода, то этот код никогда не будет исполняться.
Скажем, клиент вызывает Web-метод instantQuote в контексте транзакции. Клиент передает заголовок Transaction вместе с заголовком Payment и устанавливает его атрибут mustunderstand равным true. Так как приведенная выше реализация не проверяет наличия заголовка Transaction, то Web-сервис обрабатывает запрос, включая выставление счета на кредитную карту клиента. После возврата из метода ASP.NET обнаруживает, что свойство Didunderstand заголовка Transaction установлено в false, и возбуждает исключение. В этом случае клиент не получает котировку, однако оплата в размере полтора доллара с клиента будет затребована. Такой сценарий, конечно, не устроит клиента.
Имеются, по крайней мере, два способа избежать этого неблагоприятного побочного эффекта. Если все задействованные ресурсы управляются менеджером ресурсов DTC, ТО можно установить свойство TransactionOption атрибута webMethod как Required. Как только ASP.NET возбуждает исключение, транзакция будет прервана и произведен откат всех изменений. Если компонент CreditCardProcessor может принимать участие в распределенной транзакции DTC, то платежи по данной кредитной карточке будут автоматически отменены. Другой вариант состоит в проверке того, что все заголовки, полученные Web-сервисом с атрибутом mustunderstand, равным true, обработаны перед возвратом из Web-метода. Перехваченные заголовки, которые должны быть распознаны, но перед этим не обрабатывались Web-сервисом в Web-методе, могут потенциально сохранять ненужные циклы обработки. Если Web-метод не знает, как обработать переданный ему заголовок, он может выбрать подходящее действие, перед тем как возбудить исключение.
Надеюсь, Вам было интересно!
Что такое PHP?
PHP это скрипт, язык, встраиваемый в HTML, который интерпретируется и в дальнейшем, выполняется на сервере.
Основное отличие от скриптов, написанных на других языках (Perl, или С) это то что CGI программах вы сами вписываете выводимый HTML код. Что же касается PHP, то здесь вы встраиваете свою программу в готовую HTML страницу, при этом использывая открывающий и закрывающий тэги (в примере <?php и ?>).
На PHP можно делать все, что вообще можно сделать с помощью CGI программ.
Например: обрабатывать данные из форм, генерировать динамические страницы, получать и принемать куки (cookies)и т.п Кроме того в PHP включена поддержка многих баз данных, с помощью который написание вэб-приложений упрощается во много раз.
Вдобавок ко всему PHP понимает протоколы NNTP, SNMP,IMAP,и даже HTTP,а также имеет возможность работать с сокетами и общаться по другим протоколам.
Что же всетаки такое MySQL?
MySQL - сервер баз данных, компактный и многопоточный. MySQL характеризуется высокой скоростью, и несомненно легкостью в использовании. Этот сервер баз данных, является идеальным решением для малых и средних приложений.
В наш век человечество смогло разработать множество различных языков программирования, которые, несомненно, имеют свои плюсы и минусы. Как правило, программисты используют определенный язык и стиль программирования для решения конкретно поставленной задачи. Если вашей задачей является обеспечить интерактивность общения между вашим сайтом и его посетителями, то для этого никак лучше подойдет язык программирования JavaScript. Именно этот язык программирования позволяет превратить обычные статические страницы в интерактивные средства связи. Основная задача JavaScript – это обеспечение динамичности и гибкости в работе в web-страницей. Естественно привлекательность обычной web-страницы написанной на языке html возрастет за счет использования динамических элементов. Этими элементами будут являться сценарии, написанные на языке JavaScript.
При помощи JavaScript разработчикам удается создать сценарии, которые предоставляют посетителю более широкие возможности по управлению внешнего вида. Тут нужно отметить то, что любой посетитель сможет изменить вид вашей web-страницы в соответствии со своими предпочтениями. При этом естественно никаких изменений в ваш сайт не вноситься, дизайн меняется лишь в окне браузера посетителя и только. Именно это называется динамичностью. На сегодняшний день JavaScript позволяет существенно расширить функциональность любой web-странице в Интернет.
При этом никакой специальной поддержки данная технология не требует. Сегодня сценарии на JavaScript поддерживаться любым браузером.
Синтаксис языка JavaScript несколько напоминает его «брата», языка программирования Java, однако это лишь с первого взгляда. Если посмотреть синтаксис двух языков глубже, то можно увидеть их ключевые различия. Принцип работы JavaScript состоит в том, что все сценарии, написанные на этом языке, выполняются лишь на стороне клиента, т.е. код сценария выгружается на его компьютер, после чего воспроизводиться, это и обеспечивает динамичность всех сценариев.
90-е годы в программировании были эпохой тяжести. В это время создавались мощнейшие языки и концепции - Java, COM, .Net, CORBA, C++ и т.д. Каждый язык тогда создавался таким образом, чтобы быть как можно более универсальным, отчего выбор языка походил на выбор религии. Языки позволяли выполнять широчайший спектр задач, причем возможности языка определялись исключительно при его создании, расширяемость языков была достаточно ограниченной. Единственным ограничением для большинства языков было Web-программирование - но оно находилось в зачаточном состоянии, и там правили бал простые языки разметки.
В XXI веке ситуация переменилась. Большое распространение получили узкоспециализированные языки, чаще всего - интерпретируемые. Это было связано со взрывом Web 2.0, когда на сцену окончательно вышло программирование для Интернет, и уже не сдавало свои позиции. Эта особая среда - Web - требовала языков простых, достаточно быстрых и расширяемых. Особое распространение получили Perl, PHP, и в наши дни - Ruby.
Ruby - это полностью объектно-ориентированный язык программирования, разработанный еще в 1995 году японским студентом Юкихиро Матсумото.
Особенностью Ruby является фривольный синтаксис - вы можете делать одни и те же вещи многими путями, в зависимости от предпочтений. Интерпретатор не будет бить вас по рукам, если вы забудете поставить в конце строки точку с запятой. А еще вы можете расширять возможности языка прямо в ходе работы - просто доверившись системе обновления, которая сама скачает с Интернета нужную вам библиотеку!
Возможности Ruby не безграничны - прежде всего это скриптовый язык. И, однако, сфера его применения широка - он может использоваться как самостоятельный язык для разработки сложных приложений, он может служить удобным и мощным скриптовым языком, встроенным в другое приложение (можно привести в пример продукт RPGMaker фирмы Enterbrain, которая оснастила свою среду для создания игр полноценной Ruby-оболочкой), а также вы можете создавать на нем приложения для Интернета с помощью Ruby on Rails.
Первые шаги, которые следует сделать для вхождения в мир Ruby - это скачать интерпретатор со всеми необходимыми для начала библиотеками. Это можно сделать на официальном сайте http://ruby-lang.org В разделе Downloads вы сможете скачать так называемый «One-click installer».
Установите Ruby. Установка его крайне проста и не создаст никаких проблем.
Затем создайте текстовый файл под названием hello.rb. Откройте его в вашем текстовом редакторе и введите следуюший текст:
puts(”Hello there, Ruby!”);
Сохраните файл, и дважды щелкните на нем. В появившемся окне вы увидите, что интерпретатор Ruby запустил ваш файл и результатом работы стала строка «Hello there, Ruby!»
Порог вхождения в мир Ruby крайне низок - вам не нужно изучать все возможности языка, чтобы начать писать на нем работающие программы. С другой стороны, богатство его возможностей позволит вам писать их крайне эффективно.
Ruby - язык полностью объектно-ориентированный, а это значит, что в нем объектом является абсолютно все. Вам не нужно объявлять переменные, чтобы использовать их.
И, да, больше не нужно писать бесконечные знаки $ перед именем переменной, как это принято в PHP.