Заметки консультанта

Шамрай Александр Владимирович

Использование решения на основе веб-приложения ASP .Net Core для обработки веб-хуков TFS и VSTS

Posted by Shamrai Alexander на Март 1, 2018

Данная публикация является развитием предыдущей статьи и базовые элементы берутся из нее: Создание WCF сервиса для обработки событий из Team Foundation Server или Team Services.

Если говорить о различиях создания сервиса обработки на основе ASP .Net Core и WCF, то как можно выделить следующее:

  • WCF сервис не умеет разбирать списки в приходящих json. Для того, чтобы «научить» его делать это, необходимо использовать Newtonsoft.Json и дополнительный код в классах, что незначительно повышает трудоемкость поддержки. Веб-Api на основе ASP .Net Core в свою очередь не требует никакой дополнительной доработки для разбора json в теле запроса, только лишь необходимо правильно составить класс, структуру которого можно подсмотреть при тестировании запроса:

Рисунок 1. Отображение структуры json при тестировании запроса

Таблица 1. Реализация класса для обработки json

Реализация WCF и Newtonsoft.Json Реализация ASP .Net Core
public class WorkItemEventCore
{

[JsonProperty(«subscriptionId»)]
public string subscriptionId;
[JsonProperty(«notificationId»)]
public int notificationId;
[JsonProperty(«id»)]
public string id;
[JsonProperty(«eventType»)]
public string eventType;
[JsonProperty(«publisherId»)]
public string publisherId;
[JsonProperty(«message»)]
public MessageClass message;
[JsonProperty(«detailedMessage»)]
public DetailedMessageClass detailedMessage;
[JsonProperty(«resourceVersion»)]
public string resourceVersion;
[JsonProperty(«resourceContainers»)]
public Dictionary<string, ResourceContainerClass> resourceContainers;
[JsonProperty(«createdDate»)]
public string createdDate;

}

public class WorkItemEventCore
{
public string subscriptionId;

public int notificationId;

public string id;

public string eventType;

public string publisherId;

public MessageClass message;
public DetailedMessageClass detailedMessage;

public string resourceVersion;

public Dictionary<string, ResourceContainerClass> resourceContainers;

public string createdDate;

}

  • WCF решение можно размещать и на веб-сервере, и как отдельно стоящий сервис. Веб-приложение ASP .Net Core в свою очередь может также работать через веб-сервер, как сервис, но и дополнительно решение может являться мульти платформенным.

Поэтому, исходя из возможностей и перспектив развития своего решения, выбираем необходимую платформу. В текущем случае — веб-приложение ASP .Net Core. Для создания данного решения необходимо выполнить следующие шаги:

  • Создать веб-приложение ASP.Net Core

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

  • Выбрать шаблон проекта Веб-API

Рисунок 3. Выбор решения веб-api

namespace TFSServices.Controllers

{

[Produces(«application/json»)]

[Route(«api/TS/workitems/created»)]
public class TeamServicesWICreatedController : Controller

{
// POST: api/TS/workitems/created

[HttpPost]
public void Post([FromBody]TSEvents.WorkItemEvent.WorkItemEventCreated value)

{

}

}

[Produces(«application/json»)]

[Route(«api/TS/workitems/updated»)]


public class TeamServicesWIUpdatedController : Controller

{
// POST: api/TS/workitems/updated

[HttpPost]
public void Post([FromBody]TSEvents.WorkItemEvent.WorkItemEventUpdated value)

{

}

}

}

  • Далее тестируем запрос, при этом указываем относительный адрес, который присутствует при определении контроллера ([Route(«api/TS/workitems/updated»)]), и получаем следующий результат:

Рисунок 4. Указание необходимого адреса и тестирование решение

Рисунок 5. Отладка решения

Пример решения данной статьи находится здесь: https://github.com/ashamrai/tfevents

Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

 
%d такие блоггеры, как: