Благодаря поддержке языка R в Azure ML мы можем легко интегрировать R-скрипт в эксперимент. А далее остается сделать всего лишь несколько кликов, чтобы опубликовать этот скрипт в качестве веб-службы. В данной статье мы подробно рассмотрим процесс создания веб-службы и веб-приложения ASP.NET для работы с ней.
Создаем новый эксперимент
Первым делом мы создаем новый эксперимент. Для этого в Azure ML Studio нажимаем: +New > Experiment > Blank Experiment (+Создать > Эксперимент > Пустой эксперимент). Далее перетаскиваем модуль Execute R Script (Выполнить R-скрипт) в рабочую область эксперимента, как показано ниже:
Добавляем код 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»);
В результате наш эксперимент будет выглядеть следующим образом:
Публикуем R-скрипт в качестве веб-службы
Чтобы опубликовать R-скрипт в качестве веб-службы, мы перетаскиваем модуль Web service output из нижней части левой панели и подсоединяем его к модулю Execute R Script. Мы можем переключаться между экспериментом и схемой веб-службы с помощью соответствующего элемента управления в нижней части рабочей области.
Далее нажимаем Run (Выполнить), а после завершения нажимаем Publish Web Service (Опубликовать веб-службу) в нижней части экрана и дважды Yes (Да) для подтверждения.
После того, как веб-служба будет опубликована, отобразится ее панель управления, содержащая API-ключ и ссылку Test (Тест), предназначенную для тестирования веб-службы.
Тестируем веб-службу
Чтобы протестировать только что созданную веб-службу, мы нажимаем на ссылку Test и на флажок «This web service does not require any input» (Эта веб-служба не требует входных данных).
В нижней части экрана появится результат тестирования. Нажав на кнопку Details (Подробности), мы увидим строку данных, заданную в R-скрипте, которая была возвращена в качестве API-ответа.
Создаем 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».
В диалоге 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
public Dictionary
}
public class ScoreRequest
{
public string Id { get; set; }
public ScoreData Instance { get; set; }
}
Теперь класс должен выглядеть следующим образом:
Запускаем веб-приложение
Теперь давайте запустим наше веб-приложение (F5) и нажмем кнопку Call Web Service, чтобы обратиться к веб-службе и получить результат:
В данной статье мы продемонстрировали, что с помощью Azure ML можно легко создать веб-службу на основе R-скрипта и работать с ней посредством веб-приложения ASP.NET.