Создаем веб-службу с помощью R и Azure ML

Благодаря поддержке языка R в Azure ML мы можем легко интегрировать R-скрипт в эксперимент. А далее остается сделать всего лишь несколько кликов, чтобы опубликовать этот скрипт в качестве веб-службы. В данной статье мы подробно рассмотрим процесс создания веб-службы и веб-приложения ASP.NET для работы с ней.

Создаем новый эксперимент

Первым делом мы создаем новый эксперимент. Для этого в Azure ML Studio нажимаем: +New > Experiment > Blank Experiment (+Создать > Эксперимент > Пустой эксперимент). Далее перетаскиваем модуль Execute R Script (Выполнить R-скрипт) в рабочую область эксперимента, как показано ниже:

Рисунок 1. Модуль Execute R Script добавлен в эксперимент.

Добавляем код R-скрипта

В верхней части правой панели нажимаем на свойство R Script, удаляем пример кода и вставляем представленный ниже код:

a = c(«name», «Joe», «Lisa»)

b = c(«age», «20», «21»)

c = c(«married», TRUE, FALSE)

df = data.frame(a, b, c)

#Select the second row

data.set = df[2,]

# Return the selected row as output

maml.mapOutputPort(«data.set»);

В результате наш эксперимент будет выглядеть следующим образом:

Рисунок 2. Код R-скрипта добавлен в модуль Execute R Script

Публикуем R-скрипт в качестве веб-службы

Чтобы опубликовать R-скрипт в качестве веб-службы, мы перетаскиваем модуль Web service output из нижней части левой панели и подсоединяем его к модулю Execute R Script. Мы можем переключаться между экспериментом и схемой веб-службы с помощью соответствующего элемента управления в нижней части рабочей области.

Рисунок 3. Настройка веб-службы. Справа внизу – переключатель представления

Далее нажимаем Run (Выполнить), а после завершения нажимаем Publish Web Service (Опубликовать веб-службу) в нижней части экрана и дважды Yes (Да) для подтверждения.

После того, как веб-служба будет опубликована, отобразится ее панель управления, содержащая API-ключ и ссылку Test (Тест), предназначенную для тестирования веб-службы.

Рисунок 4. Панель управления веб-службы

Тестируем веб-службу

Чтобы протестировать только что созданную веб-службу, мы нажимаем на ссылку Test и на флажок «This web service does not require any input» (Эта веб-служба не требует входных данных).

В нижней части экрана появится результат тестирования. Нажав на кнопку Details (Подробности), мы увидим строку данных, заданную в R-скрипте, которая была возвращена в качестве API-ответа.

Рисунок 5. В качестве ответа веб-службы возвращен результат выполнения R-скрипта

Создаем ASP.NET-клиент

Чтобы обращаться к нашей веб-службе, мы создадим веб-приложение ASP.NET. Для этого запускаем Visual Studio и создаем новое веб-приложение: File > New > Project > Visual C# > Web > ASP.NET Web Application (Файл > Создать > Проект > Visual C# > Веб > Веб-приложение ASP.NET). В поле Name (Имя) вводим название приложения: «R Web Service Client».

Рисунок 6. Создание проекта веб-приложения ASP.NET

В диалоге New ASP.NET Project (Новый проект ASP.NET) выбираем Web Forms (Веб-формы) и нажимаем OK.

Далее в окне Solution Explorer (Обозреватель решений) нажимаем правой клавишей на имени проекта («R Web Service Client») и добавляем новую веб-форму. В качестве названия формы вводим «CallR».

Создаем интерфейс пользователя

В файле CallR.aspx вставляем следующий код в блок div>:

R Web Service client



Пишем код для вызова веб-службы

Для нашего случая мы возьмем код, размещенный на справочной странице API help page (см. рис. 4), и немного модифицируем его под ASP.NET. Вначале мы устанавливаем Microsoft.AspNet.WebApi.Client, а затем добавляем следующие операторы using:

using System.Net.Http;

using System.Net.Http.Formatting;

using System.Net.Http.Headers;

using System.Text;

using System.Threading.Tasks;

Далее в файле CallR.aspx.cs создаем обработчик нажатия кнопки Button1_Click:

protected void Button1_Click(object sender, EventArgs e)

{

InvokeRequestResponseService().Wait();

}

Затем добавляем следующий метод:

async Task InvokeRequestResponseService()

{

using (var client = new HttpClient())

{

ScoreData scoreData = new ScoreData()

{

FeatureVector = new Dictionary() {},

GlobalParameters = new Dictionary(){}

};

ScoreRequest scoreRequest = new ScoreRequest()

{

Id = «score00001»,

Instance = scoreData

};

//Set the API key (Use API key for your web service – see Firgure 4)

const string apiKey = «a4C/IkyCy6N4Gm80aF6A==»;

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(«Bearer», apiKey);

client.BaseAddress = new Uri(«https://ussouthcentral.services.azureml.net/workspaces/b3692371e94aa5bec7a28889/services/874c7886a2453d947113e48c1d/score»);//Replace with your web service URL from C# Sample code of the API help page for RRS

HttpResponseMessage response = await client.PostAsJsonAsync(«», scoreRequest).ConfigureAwait(false);

if (response.IsSuccessStatusCode)

{

string result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

Label1.Text = «Result: » + result;

}

else

{

Label1.Text = «Failed with status code: » + response.StatusCode;

}

}

}

Наконец, добавляем следующие два класса после разделяемого (partial) класса CallR:

public class ScoreData

{

public Dictionary FeatureVector { get; set; }

public Dictionary GlobalParameters { get; set; }

}

public class ScoreRequest

{

public string Id { get; set; }

public ScoreData Instance { get; set; }

}

Теперь класс должен выглядеть следующим образом:

Запускаем веб-приложение

Теперь давайте запустим наше веб-приложение (F5) и нажмем кнопку Call Web Service, чтобы обратиться к веб-службе и получить результат:

В данной статье мы продемонстрировали, что с помощью Azure ML можно легко создать веб-службу на основе R-скрипта и работать с ней посредством веб-приложения ASP.NET.

Добавить комментарий

Ваш адрес email не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =