Запрос онлайн данных в СПИК
Чтобы сделать запрос онлайн данных (ОД), необходимо выполнить следующие действия:
- Пройти авторизацию в системе СКАУТ (если не пройдена).
- Получить список идентификаторов Объектов мониторинга, по которым необходимо получить онлайн данные.
- Сформировать запрос для подписки на получение ОД и указать список идентификаторов объектов мониторинга, по которым мы хотим получать данные.
- Подписаться на онлайн данные, вызвав у сервиса SpicOnlineDataService метод Subscribe с параметром, полученным на шаге 2. При успешном выполнении сервис вернёт SpicOnlineDataSubscriptionResponse. В нём будет находиться ключ сессии онлайн данных.
- Получить онлайн данные по подписке. Вызвать у сервиса SpicOnlineDataService метод GetOnlineData, передав в качестве параметра идентификатор сессии онлайн данных, полученной на предыдущем шаге (по полученному идентификатору подписки можно много раз получать онлайн-данные).
Реализацию данного алгоритма на JS можно найти в рецепте, иллюстрирующем отображение онлайн данных на карте.
Для реализации данного алгоритма на C# необходимо:
- Авторизоваться в Системе СКАУТ.
- Получить объекты мониторинга.
- Создать заглушку для сервиса SpicOnlineDataService. Например, SpicOnlineDataServiceClient.
- Добавить AuthorizationBehavior к созданной заглушке SpicOnlineDataServiceClient.
- Сформировать запрос на получение онлайн-данных (SpicOnlineDataSubscriptionRequest)
- Вызвать метод Subscribe заглушки SpicOnlineDataServiceClient
- Получить онлайн-данные по подписке, вызвав метод GetOnlineData заглушки SpicOnlineDataServiceClient
Пример на C#.
public class OnlineDataExample
{
//заглушка сервиса подписок на получение онлайн данных
private readonly SpicSoapOnlineDataServiceClient _dataServiceClient;
public OnlineDataExample()
{
_dataServiceClient = new SpicSoapOnlineDataServiceClient();
_dataServiceClient.Endpoint.Behaviors.Add(new AuthorizationBehavior());
}
/// <summary>
/// Метод получения онлайн-данных
/// </summary>
/// <remarks>Необходимо пройти авторизацию перед вызовом этого метода</remarks>
/// <param name="units">Идентификаторы объектов, по которым хотим получить онлайн-данные</param>
public SpicOnlineDataCollection GetOnlineData(int[] unitIds)
{
var subscription = new SpicOnlineDataSubscriptionRequest { UnitIds = unitIds };
var response = _dataServiceClient.Subscribe(subscription);
var onlineData = _dataServiceClient.GetOnlineData(new SpicOnlineDataSessionId { Id = response.SessionId.Value.Id });
return onlineData.OnlineDataCollection;
}
}
Пример на JS.
var session = subscribeOnServer(unitIds);
var onlineData = getOnlineDataOnServer(session.Id);
return onlineData;
function subscribeOnServer(unitIds) {
return provider.POSTAuthorized(subscribeUrl,
{
UnitIds: unitIds
},
getAuthorizationToken()).response.SessionId;
}
function getOnlineDataOnServer(subscriptionId) {
return provider.POSTAuthorized(getOnlineDataUrl,
{
Id: subscriptionId
},
getAuthorizationToken()).response.OnlineDataCollection;
}
Где взять subscribeUrl ?