Веб-сервис — это веб-функциональность, доступ к которой осуществляется через веб-протоколы, используемые веб-приложениями. Существует три аспекта разработки веб-сервисов:
- Создание веб-сервиса
- Создание прокси
- Использование веб-службы
Создание веб-службы
Веб-сервис — это веб-приложение, которое представляет собой класс, состоящий из методов, которые могут использоваться другими приложениями. Он также следует архитектуре с выделенным кодом, такой как веб-страницы ASP.NET, хотя и не имеет пользовательского интерфейса.
Чтобы понять концепцию, давайте создадим веб-сервис для предоставления информации о цене акций. Клиенты могут запросить название и цену акции на основе символа акции. Для простоты этого примера значения жестко закодированы в двумерном массиве. Этот веб-сервис имеет три метода:
- Метод HelloWorld по умолчанию
- Метод GetName
- Метод GetPrice
Выполните следующие шаги для создания веб-службы:
Шаг (1) : Выберите Файл -> Создать -> Веб-сайт в Visual Studio, а затем выберите Веб-служба ASP.NET.
Шаг (2) : Файл веб-службы с именем Service.asmx и его код за файлом Service.cs создается в каталоге App_Code проекта.
Шаг (3) : Измените имена файлов на StockService.asmx и StockService.cs.
Шаг (4) . Файл .asmx содержит просто директиву WebService:
<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>
Шаг (5) : Откройте файл StockService.cs, сгенерированный в нем код является основным сервисом Hello World. Код веб-службы по умолчанию за файлом выглядит следующим образом:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; namespace StockService { // <summary> // Summary description for Service1 // <summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } } }
Шаг (6) : Измените код, стоящий за файлом, чтобы добавить двумерный массив строк для символа акции, имени и цены, а также два веб-метода для получения информации об акции.
using System; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class StockService : System.Web.Services.WebService { public StockService () { //Uncomment the following if using designed components //InitializeComponent(); } string[,] stocks = { {"RELIND", "Reliance Industries", "1060.15"}, {"ICICI", "ICICI Bank", "911.55"}, {"JSW", "JSW Steel", "1201.25"}, {"WIPRO", "Wipro Limited", "1194.65"}, {"SATYAM", "Satyam Computers", "91.10"} }; [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public double GetPrice(string symbol) { //it takes the symbol as parameter and returns price for (int i = 0; i < stocks.GetLength(0); i++) { if (String.Compare(symbol, stocks[i, 0], true) == 0) return Convert.ToDouble(stocks[i, 2]); } return 0; } [WebMethod] public string GetName(string symbol) { // It takes the symbol as parameter and // returns name of the stock for (int i = 0; i < stocks.GetLength(0); i++) { if (String.Compare(symbol, stocks[i, 0], true) == 0) return stocks[i, 1]; } return "Stock Not Found"; } }
Шаг (7) . Запуск приложения веб-службы дает тестовую страницу веб-службы, которая позволяет тестировать методы службы.
Шаг (8) : Нажмите на имя метода и проверьте, правильно ли он работает.
Шаг (9) : Для тестирования метода GetName, предоставьте один из символов акции, которые жестко закодированы, он возвращает название акции
Использование веб-службы
Для использования веб-службы создайте веб-сайт под тем же решением. Это можно сделать, щелкнув правой кнопкой мыши имя решения в обозревателе решений. Веб-страница, вызывающая веб-службу, должна иметь элемент управления меткой для отображения возвращаемых результатов и два элемента управления кнопки, один для отправки назад, а другой для вызова службы.
Файл содержимого для веб-приложения выглядит следующим образом:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <h3>Using the Stock Service</h3> <br /> <br /> <asp:Label ID="lblmessage" runat="server"></asp:Label> <br /> <br /> <asp:Button ID="btnpostback" runat="server" onclick="Button1_Click" Text="Post Back" style="width:132px" /> <asp:Button ID="btnservice" runat="server" onclick="btnservice_Click" Text="Get Stock" style="width:99px" /> </div> </form> </body> </html>
Код файла для веб-приложения выглядит следующим образом:
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; //this is the proxy using localhost; namespace wsclient { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { lblmessage.Text = "First Loading Time: " + DateTime.Now.ToLongTimeString } else { lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString(); } } protected void btnservice_Click(object sender, EventArgs e) { StockService proxy = new StockService(); lblmessage.Text = String.Format("Current SATYAM Price:{0}", proxy.GetPrice("SATYAM").ToString()); } } }
Создание прокси
Прокси-сервер является заменой для кодов веб-службы. Перед использованием веб-службы необходимо создать прокси. Прокси-сервер зарегистрирован в клиентском приложении. Затем клиентское приложение выполняет вызовы веб-службы, как если бы они использовали локальный метод.
Прокси принимает вызовы, упаковывает их в надлежащий формат и отправляет на сервер в виде SOAP-запроса. SOAP означает простой протокол доступа к объектам. Этот протокол используется для обмена данными веб-службы.
Когда сервер возвращает пакет SOAP клиенту, прокси-сервер декодирует все и представляет его клиентскому приложению.
Перед вызовом веб-службы с использованием btnservice_Click, веб-ссылка должна быть добавлена в приложение. Это прозрачно создает прокси-класс, который используется событием btnservice_Click.
protected void btnservice_Click(object sender, EventArgs e) { StockService proxy = new StockService(); lblmessage.Text = String.Format("Current SATYAM Price: {0}", proxy.GetPrice("SATYAM").ToString()); }
Выполните следующие шаги для создания прокси:
Шаг (1) : Щелкните правой кнопкой мыши запись веб-приложения в обозревателе решений и выберите «Добавить веб-ссылку».
Шаг (2) : выберите «Веб-службы в этом решении». Возвращает ссылку на StockService.
Шаг (3) : При нажатии на сервис открывается тестовая веб-страница. По умолчанию созданный прокси называется localhost, вы можете переименовать его. Нажмите «Добавить ссылку», чтобы добавить прокси в клиентское приложение.
Включите прокси в код файла, добавив: