Как вызвать веб-сервис Java в ASP.net с помощью C#

ОГЛАВЛЕНИЕ

Скачать Code.zip - 34.24 Кб

Оглавление

  • Вводная информация
    • Определение
    • Свойства веб-сервисов
    • Базовые компоненты
  • Способность к взаимодействию веб-сервисов
  • Создание веб-сервиса Java
    • Создать проект веб-приложения
    • Добавить веб-сервис в проект
    • Добавить операции в веб-сервис
    • Реализация веб-методов
    • Установка и тестирование веб-сервиса
  • Создание веб-сайта ASP.net с помощью C#
    • Создатьвеб-сайт ASP.net
    • Добавить веб-ссылку
    • Написать код для вызова веб-сервиса
    • Протестировать клиентское приложение веб-сервиса
  • Вывод

Вводная информация

Согласно W3C: Веб-сервис - это программная система, обеспечивающая совместимое межмашинное взаимодействие через сеть:
1.    Он имеет интерфейс, описанный в машинно-обрабатываемом формате (а именно WSDL).
2.    Другие системы взаимодействуют с веб-сервисом способом, установленным его описанием, с помощью сообщений SOAP, обычно передаваемых с помощью HTTP с сериализацией XML в сочетании с иными веб-стандартами.

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

Веб-сервис содержит три основных компонента:
1.    Механизм для отыскания и регистрации интереса к сервису
2.    Определение входных и выходных параметров сервиса
3.    Механизм передачи для обращения к сервису

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

Способность к взаимодействию веб-сервисов

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

Веб-сервис имеет много потенциальных клиентов, и этот набор клиентов может использовать различные библиотеки и провайдеров для подключения. Сервисы могут, в свою очередь, становиться клиентами других сервисов. Обеспечение взаимодействия с сервисом клиентов, основанных на разных реализациях стандартов, крайне важно для успеха сервиса.
Главная цель этой статьи – показать способ создания веб-сервиса Java и его вызова из приложения ASP.net (C#).
Здесь разрабатываются простые математические функции, такие как сложение, вычитание, и т.д. с использованием веб-сервисов Java под названием JSimpCalcWebService. Далее показан способ вызова методов этих веб-сервисов с помощью ASP.net с C# под названием JSimpCalcWebServiceWebSite.Для создания этих двух отдельных приложений надо использовать две интегрированные среды разработки. Здесь в примере используется NetBeans 6 для веб-сервиса Java и Visual Studio 2008 для клиента веб-сервиса ASP.net, вызывающего веб-сервис.


Создание веб-сервиса Java

Netbeans 6 предоставляет очень простой и удобный способ разработки веб-сервиса. Разработка веб-сервиса с ее помощью проводится в несколько шагов. Эти шаги изложены ниже:
1.    Создать проект веб-приложения.
2.    Добавить веб-сервис в проект.
3.    Добавить операции в веб-сервис.
4.    Реализация веб-методов.
5.    Развернуть и протестировать веб-сервис.

Шаг 1. Создать проект веб-приложения
i.    Запустить Netbeans IDE; перейти в “Новый проект”, находящийся в меню ”Файл”. Откроется мастер нового проекта.
ii.    Выбрать веб из вариантов категорий и веб-приложение из раздела проекта и затем нажать на кнопку ”Далее”.

Рисунок 1: Создать новый проект - шаг 1

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

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

Используется сервер приложений GlassFish V2 для развертывания.

 

Рисунок 2: Создать новый проект - шаг 2

iv.    Нажать кнопку ”Завершить”.

Шаг 2. Добавить веб-сервис в ”Проект”
i.    Щелкнуть правой кнопкой мыши по имени проекта в окне проводника ”Проекты”.

 

Рисунок 3: Пункт меню ”веб-сервис”

ii.    Из пунктов контекстного меню выбрать меню ”веб-сервис”. Откроется диалоговое окно веб-сервиса.

 

Рисунок 4: Добавить новый веб-сервис

iii.    Указать имя веб-сервиса и имя пакета, как показано на рисунке ниже, и затем нажать кнопку ”Завершить”.
В приведенном примере имя веб-сервиса – JsimpCalcWebService, а имя пакета - calc.ws.

Шаг 3. Добавить операции в веб-сервис

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

 

Рисунок 5: Добавить операцию в веб-сервис

i.    Как показывает выделенный участок на рисунке 5, можно добавлять операции веб-сервиса путем нажатия кнопки ”Добавить операцию”. Оно открывает диалоговое окно ”Добавить операцию”. Смотрите рисунок 6.

 

Рисунок 6: Добавить параметры к веб-операции

ii.    В диалоговом окне ”Добавить операцию” надо указать имя (на самом деле являющееся именем WebMethod).
iii.    Также можно ввести имена параметров и их типы (эти параметры называются WebParam).
На рисунке 6 в качестве имени WebMethod указывается addition(сложение), чей тип возвращаемой переменной - java.lang.String, и он принимает два параметра (parameter1. и parameter2) типа double(вещественное число двойной точности). Аналогично создаются остальные операции –subtraction(вычитание), multiplication(умножение), division(деление), power(возведение в степень), maximum(максимум), minimum(минимум).

Шаг 4: Реализация веб-методов
После завершения шага 3 каркас веб-сервиса готов. Переключаемся из режима разработки в режим исходного кода, как показано на рисунке 7, чтобы сделать остальную часть реализации.

 

Рисунок 7: Написать код для веб-сервиса

Код должен выглядеть так:

package calc.ws;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import calc.util.NumberFormater;

/**
 */
@WebService()
public class JSimpCalcWebService {

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "addition")
    public String addition(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        //Написать ваш код реализации здесь:
        return NumberFormater.format((parameter1 + parameter2),0,6);
    }

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "subtraction")
    public String subtraction(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        // Написать ваш код реализации здесь:
        return NumberFormater.format((parameter1 - parameter2),0,6);
    }

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "multiplication")
    public String multiplication(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        //Написать ваш код реализации здесь:
        return NumberFormater.format((parameter1 * parameter2),0,6);
    }

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "division")
    public String division(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        //Написать ваш код реализации здесь:
        return NumberFormater.format((parameter1 / parameter2),0,6);
    }

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "power")
    public String power(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        //Написать ваш код реализации здесь:
        return NumberFormater.format(Math.pow(parameter1, parameter2),0,6);
    }

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "maximum")
    public String maximum(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        //Написать ваш код реализации здесь:
        return NumberFormater.format(Math.max(parameter1, parameter2),0,6);
    }

/**
     * Операция веб-сервиса
     */
    @WebMethod(operationName = "minimum")
    public String minimum(@WebParam(name = "parameter1")
    double parameter1, @WebParam(name = "parameter2")
    double parameter2) {
        //Написать ваш код реализации здесь:
        return NumberFormater.format(Math.min(parameter1, parameter2),0,6);
    }
}    

Исходник 1: Исходный код веб-сервиса Java JSimpCalcWebService.java

Здесь используется метод NumberFormater.format(double number, int minFractionDigits,
int maxFractionDigits) для форматирования значения double в java.lang.String до шестого десятичного знака. Смотрите исходник 2.

package calc.util;

import java.text.NumberFormat;

/**
 *
 */
public class NumberFormater {

    public static String format(double number, int minFractionDigits,
            int maxFractionDigits) {
        NumberFormat format = NumberFormat.getInstance();
        format.setMaximumFractionDigits(maxFractionDigits);
        format.setMinimumFractionDigits(minFractionDigits);
        return format.format(number);
    }
}

Исходник 2: Исходный код NumberFormater.java

Шаг 5. Развернуть и протестировать веб-сервис

Теперь веб-сервис готов к развертыванию и тестированию. В Netbeans 6 это делается в несколько шагов. Сначала убедитесь, что сервер GlassFish работает. Чтобы запустить сервер, надо выполнить следующие шаги.
i.    Перейти в окно проводника ”Сервисы”.
ii.    Развернуть узел ”Серверы”.
iii.    Щелкнуть правой кнопкой мыши по имени сервера (в данном случае GlassFish V2). Появится контекстное меню.
iv.    Выбрать ”Запустить” из пунктов меню.

 

Рисунок 8: Запустить сервер приложений GlassFish V2

Теперь, когда сервер работает, пора развернуть приложение и протестировать созданный веб-сервис. Netbeans сама выполняет развертывания с помощью нескольких щелчков мышью, перечисленных ниже:
i.    Перейти в окно проводника ”Проекты”.
ii.    Развернуть узел ”веб-сервисы”.
iii.    Щелкнуть правой кнопкой мыши по имени веб-сервисов (в данном случае JSimpCalcWebService). Появится контекстное меню.
iv.    Нажать на меню ”Тестировать веб-сервис”.

 

Рисунок 9: Тестировать веб-сервис

Вышеизложенные шаги развертывают приложение и запускают стандартный браузер, в котором веб-сервис тестируется с помощью запроса и ответа SOAP(простой протокол доступа к объектам). Пример вывода показан на рисунке 10. Также можно просмотреть файл WSDL (язык описания веб-сервисов) путем щелчка по ссылке.

 

Рисунок 10: Тестировать веб-сервис

Кроме того, можно протестировать веб-сервис и просмотреть его файл WSDL с помощью консоли администрирования сервера приложений GlassFish, как показано на рисунке 11.

 

Рисунок 11: Тестировать веб-сервис через консоль администрирования

Нажав на ссылку ”Просмотреть WSDL”, можно просмотреть файл XML, описывающий веб-сервис. Файл WSDL должен выглядеть как на рисунке 12.

 

Рисунок 12: Файл WSDL

URL(унифицированный указатель ресурса), показанный в адресной строке, потребует вызова веб-сервиса. Далее показано его использование при создании веб-приложения с помощью ASP.net.


Создание веб-сайта ASP.net с помощью C#

Теперь веб-сервис можно вызвать из платформы разработки, не основанной на Java. В данной статье разрабатывается пример клиента на базе ASP.net. В Visual Studio 2008 это делается в несколько шагов, изложенных ниже:
1.    Создать веб-сайт ASP.net.
2.    Добавить веб-ссылку.
3.    Написать код для вызова веб-сервиса.
4.    Протестировать клиентское приложение веб-сервиса.

Шаг 1. Создать веб-сайт ASP.net

i.    Запустить Visual Studio 2008; перейти в Новый ? Веб-сайт …, находящийся в меню Файл.

 

Рисунок 13: Окно ”Новый веб-сайт”

ii.    Выбрать веб-сайт ASP.net.
iii.    Выбрать папку, в которой будет создан веб-сайт. В данном случае это JSimpCalcWebServiceWebSite
iv.    Выбрать язык Visual C# и нажать кнопку OK.

Шаг 2. Добавить веб-ссылку

Теперь надо указать файл WSDL в веб-сайте. Для добавления ссылки на веб-сервис надо выполнить следующие шаги:
i.    Перейти в окно ”Проводник решения”.
ii.    Щелкнуть правой кнопкой мыши по имени проекта (в данном случае JSimpCalcWebServiceWebSite). Появится контекстное меню.
iii.    Щелкнуть по меню ”Добавить веб-ссылку”. Откроется диалоговое окно ”Добавить веб-ссылку”.

 

Рисунок 14: Контекстное меню ”Добавить веб-ссылку”

iv.    Скопировать и вставить унифицированный указатель ресурса WSDL из адресной строки браузера (смотрите рисунок 12) в адресную строку диалогового окна ”Добавить веб-ссылку” и нажать кнопку ”Перейти” (смотрите рисунок 15).

 

Рисунок 15: Диалоговое окно ”Добавить веб-ссылку”

v.    Отобразятся все имена методов веб-сервиса. Ввести имя веб-ссылки (в данном примере JSimpCalcWebService) и нажать кнопку ”Добавить ссылку”.

Шаг 3. Написать код для вызова веб-сервиса

С помощью C# очень легко вызывается веб-сервис при помощи нескольких строк кода:
i.    Сначала создается страница ASP.net. Имя файла по умолчанию - Default.aspx (исходник есть в zip-архиве).
ii.    Веб-ссылка включается в код (т.е. Default.aspx.cs). Например:
using JSimpCalcWebServiceService;
iii.    Создается объект веб-ссылки.

JSimpCalcWebServiceService.JSimpCalcWebServiceService proxy = new JSimpCalcWebServiceService.JSimpCalcWebServiceService();

iv.    WebMethod вызывается подобно любому другому вызову метода. Например:
proxy.addition(10,20);

 

Рисунок 16: Код вызова веб-методов

Код должен выглядеть так:

using System;
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;
using JSimpCalcWebServiceService;

public partial class _Default : System.Web.UI.Page
{
    JSimpCalcWebServiceService.JSimpCalcWebServiceService proxy;

    protected void Page_Load(object sender, EventArgs e)
    {
        proxy = new JSimpCalcWebServiceService.JSimpCalcWebServiceService();
    }

    protected void btnAddition_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultAddition.Text = "Результат: " + proxy.addition(double.Parse(txtbtnAdditionParameter1.Text),
                                double.Parse(txtbtnAdditionParameter2.Text));
        }
        catch (FormatException)
        {
            lblResultAddition.Text = "Результат: недопустимый ввод";
        }
        UpdatePanelAddition.Update();
    }

    protected void btnSubtraction_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultSubtraction.Text = "Результат: " + proxy.subtraction(double.Parse(txtSubtractionParameter1.Text),
                                    double.Parse(txtSubtractionParameter2.Text));
        }
        catch(FormatException)
        {
            lblResultSubtraction.Text = "Результат: недопустимый ввод";
        }

        UpdatePanelSubtraction.Update();
    }
    protected void btnMultiplication_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultMultiplication.Text = "Результат: " + proxy.multiplication(double.Parse(txtMultiplicationParameter1.Text),
                                    double.Parse(txtMultiplicationParameter2.Text));
        }
        catch (FormatException)
        {
            lblResultMultiplication.Text = "Результат: недопустимый ввод";
        }

        UpdatePanelMultiplication.Update();
    }

    protected void btnDivision_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultDivision.Text = "Результат: " + proxy.division(double.Parse(txtDivisionParameter1.Text),
                                double.Parse(txtDivisionParameter2.Text));
        }
        catch (FormatException)
        {
            lblResultDivision.Text = "Результат: недопустимый ввод";
        }

        UpdatePanelDivision.Update();
    }

    protected void btnMaximum_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultMaxMin.Text = "Результат: " + proxy.maximum(double.Parse(txtMaxMinParameter1.Text),
                            double.Parse(txtMaxMinParameter2.Text));
        }
        catch (FormatException)
        {
            lblResultMaxMin.Text = "Результат: недопустимый ввод";
        }

        UpdatePanelMaxMin.Update();
    }

    protected void btnMinimum_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultMaxMin.Text = "Результат: " + proxy.minimum(double.Parse(txtMaxMinParameter1.Text),
                                double.Parse(txtMaxMinParameter2.Text));
        }
        catch (FormatException)
        {
            lblResultMaxMin.Text = "Результат: недопустимый ввод";
        }

        UpdatePanelMaxMin.Update();
    }

    protected void btnPower_Click(object sender, EventArgs e)
    {
        try
        {
            lblResultPower.Text = "Результат: " + proxy.power(double.Parse(txtPowerParameter1.Text),
                            double.Parse(txtPowerParameter2.Text));
        }
        catch (FormatException)
        {
            lblResultPower.Text = "Результат: недопустимый ввод";
        }

        UpdatePanelPower.Update();
    }
}

Исходник 3: Исходный код Default.aspx.cs

Шаг 4. Протестировать клиентское приложение веб-сервиса

Теперь пора протестировать клиентское приложение веб-сервиса путем нажатия на кнопку ”Начать отладку” на панели инструментов или путем нажатия кнопки F5 на клавиатуре. Веб-страница должна выглядеть как на рисунке ниже.

 

Рисунок 17: Вывод веб-сайта

Вывод:

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

Рассмотренный здесь пример использует ряд свойств веб-сервисов, перечисленных ниже:
•    Автономный: Веб-сервис не требует дополнительных программ:

a.    Сторона клиента: Язык программирования с поддержкой клиента XML/HTML.
b.    Сторона сервера: Нужны веб-сервер и сервер SOAP.

•    Слабосвязанный: Клиент и сервер знают только о сообщениях – простой уровень взаимодействия, позволяющий более гибко менять конфигурацию.
•    Веб-ориентированный: Веб-сервис публикуется, находится и вызывается через сеть с помощью утвержденных легких интернет-стандартов.
•    Независимый от языка и совместимый: Клиент и сервер могут быть реализованы в разных средах и на разных языках.
•    Компонуемый: Веб-сервисы могут объединяться с помощью средств потока операций для выполнения высокоуровневых бизнес-функций.
•    Динамически связываемый: С помощью UDDI и WSDL можно автоматизировать обнаружение и связывание веб-сервисов.
•    Программный доступ: Подход веб-сервисов не предоставляет графический интерфейс пользователя, но работает на командном уровне.
•    Оборачивает существующие приложения: Автономные приложения легко объединяются путем реализации веб-сервиса в качестве интерфейса.

Аналогично можно создавать веб-сервисы на C# и вызывать их через клиентское приложение веб-сервиса, написанное на Java.