Автор: Dflying Chen ( http://dflying.cnblogs.com/ )
Во всех предыдущих сериях статей напрямую упоминается один веб-сервис. Однако в реальной разработке проекта, особенно при преобразовании существующих проектов, извлечение логики страницы в специализированный веб-сервис часто требует немалой работы. Atlas принимает это во внимание и позволяет добавить атрибут [WebMethod] к общедоступному методу на стороне сервера, чтобы разрешить прямые вызовы из клиентского JavaScript.
Чтобы разрешить клиентам напрямую вызывать методы, определенные на страницах ASPX, вам необходимо указать метод как общедоступный и добавить атрибут [WebMethod], например следующий метод на стороне сервера, определенный в файле ASPX:
<script runat="server">
[Веб-метод]
public int AddInt (int int1, int int2)
{
вернуть int1 + int2;
}
</скрипт>
На стороне клиента Atlas создаст для вас гибридный метод AddInt JavaScript, который существует в специальном пространстве имен PageMethods, чтобы вы могли вызвать указанный выше метод через PageMethods.AddInt().
В то же время, определив WebMethod на странице ASPX, вы также можете получить доступ к значениям и ViewState серверных элементов управления на всех страницах в этом методе, и жизненный цикл всей страницы будет таким же, как и у традиционная страница ASP.NET PostBack, такая как Page_Load. Будут вызываться все остальные методы, что позволит нам получить более надежный доступ к странице. Однако это также дает скидку на производительность, поскольку каждый раз, когда вызывается веб-метод, значения ViewState и элементов управления на странице будут передаваться обратно на сервер, и серверная обработка всего жизненного цикла страницы будет дольше, чем просто обработка чистого метода. Веб-метод, определенный в ASMX, намного сложнее. Поэтому здесь я рекомендую максимально использовать чистый веб-сервис. См.: Рекомендуется использовать веб-сервис вместо метода страницы в реализации Atlas на стороне сервера.
Давайте рассмотрим пример. Сначала давайте определим WebMethod в ASPX. Вы можете видеть, что он не только находит сумму двух чисел, но также обращается к значению текстового поля на стороне сервера:
<script runat="server. ">
[Веб-метод]
общедоступная строка AddInt (int int1, int int2)
{
return (int1 + int2).ToString() + string.Format("rnИ текст текстового поля сервера равен '{0}'.", tbServer.Text);
}
</скрипт>
Затем есть ScriptManager страницы. Здесь нет необходимости добавлять какие-либо ссылки: <atlas:ScriptManager ID="scriptManager" runat="server" />.
Затем есть два входа, используемые для ввода дополнения, и вход, используемый для запуска вызова сервера:
<input id="value1" type="text" value="1" />
<input id="value2" type="text" value="2" />
<input id="btnAdd" type="button" value="Добавить!" onclick="return btnAdd_onclick()" />
Существует также текстовое поле на стороне сервера:
<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
Последний вызов — это вызов JavaScript. Обратите внимание на встроенное пространство имен PageMethods:
function btnAdd_onclick() {.
PageMethods.AddInt(
$('значение1').значение,
$('value2').значение,
При завершении
);
}
функцияOnComplete(результат)
{
оповещение (результат);
}
Запустите его в браузере, введите два дополнения, затем введите несколько символов в TextBox на стороне сервера, нажмите «Добавить», и вы увидите, что значение TextBox на стороне сервера было получено:
Это сетевая передача, перехваченная Fiddler. Вы можете видеть, что ViewState и TextBox передаются обратно на сервер:
Исходный код этого примера программы можно скачать здесь: