AutoGRAPH.NET Service — различия между версиями

Материал из TK
Перейти к: навигация, поиск
(Описание работы)
(Конфигурация)
Строка 26: Строка 26:
 
<span class="marker">&nbsp;между binPath= и полным путем - пробел&nbsp;</span>
 
<span class="marker">&nbsp;между binPath= и полным путем - пробел&nbsp;</span>
   
  +
== Дальше ==
== Конфигурация ==
 
   
  +
[[AutoGRAPH.NET_Service_Config|Конфигурация]]
После распаковки AutoGRAPH.NET Service в какой-нибудь каталог необходимо отредактировать файл '''AutoGRAPHNETService.exe.config'''. Далее приведены описания ключей файла конфигурации:
 
<pre><add key="key-file" value="N:\Ключи АвтоГРАФ-Сервер\AutoGRAPHServer_3.0\30008_4x4_magnitka.agkey"/>
 
<add key="address" value="http://localhost:800/"/>
 
<add key="address-json" value="http://localhost:810/"/>
 
<add key="common-directory" value="C:\ProgramData\AutoGRAPH Shell"/>
 
<add key="data-directory" value="C:\Users\denisio\AppData\Roaming\AutoGRAPH Shell\Data"/>
 
<add key="users-directory" value="C:\TK\DataLoader\_testusers"/>
 
<add key="devices-directory" value="C:\TK\DataLoader\_testdevices"/>
 
</pre>
 
 
{| border="1" cellspacing="0" cellpadding="5" style="width: 100%;"
 
|-
 
| style="width: 137px;" | key-file
 
| style="width: 1084px;" colspan="2" | файл ключа .agkey (от AutoGRAPH.Server), который разрешает использования для прописанного списка приборов. Данный файл находится в каталоге AutoGRAPH.Server.<br/><span class="marker"><span style="background-color:#FFFF00;">Обязательный параметр!</span></span> Без него сервис работать не будет.<br/>
 
|-
 
| style="width: 137px;" | address
 
| style="width: 1084px;" colspan="2" | локальный адрес, на котором обрабатываются запросы по протоколу [https://msdn.microsoft.com/en-us/library/dd699756(v=vs.110).aspx WCF] (<span style="line-height: 20.7999992370605px;">в настоящий момент протестирован только механизм httpBinding)</span>. Формат - url:port<br/>Варианты использования:
 
*'''<tt>[http://192.168.1.3:8000 http://192.168.1.3:8000]</tt>''' - принимать подключения на локальном IP-адресе 192.168.1.3 и TCP-порт 8000 (обычно данный вариант используется, если в сервере установлено несколько сетевых карт или задано несколько IP-адресов)
 
*'''<tt>[http://0.0.0.0:8000 http://0.0.0.0:8000]</tt>''' или '''<tt><code>[http://*:8000&nbsp http://*:8000]&nbsp;</code></tt>'''- <span style="line-height: 20.7999992370605px;">принимать подключения&nbsp;</span>на всех доступных локальных IP-адресах и TCP-порту 8000
 
*'''<tt>[http://127.0.0.1:8000 http://127.0.0.1:8000]</tt>''' - принимать подключения только локально (обычно используется, когда приложение, которое работает со службой, установлено на том же компьютере, что и служба. При этом запросы, идущие через сетевые карты - будут игнорироваться в целях безопасности.&nbsp;Типичный пример - установка службы на сервере 1С:Предприятия.)
 
 
|-
 
| style="width: 137px;" | address-json
 
| style="width: 1084px;" colspan="2" | <span style="line-height: 20.7999992370605px;">локальный адрес, на котором обрабатываются запросы по протоколу [https://en.wikipedia.org/wiki/JSON JSON]</span><span style="line-height: 20.7999992370605px;">. Формат - url:port</span><br/><span style="line-height: 20.7999992370605px;">Варианты использования:</span><ul style="line-height: 20.7999992370605px;">
 
<li>'''<tt>[http://192.168.1.3:8000 http://192.168.1.3:8000]</tt>'''&nbsp;- принимать подключения на локальном IP-адресе 192.168.1.3 и TCP-порт 8000 (обычно данный вариант используется, если в сервере установлено несколько сетевых карт или задано несколько IP-адресов)</li>
 
<li>'''<tt>[http://0.0.0.0:8000 http://0.0.0.0:8000]</tt>'''&nbsp;или&nbsp;'''<tt>[http://*:8000&nbsp http://*:8000]&nbsp;</tt>'''-&nbsp;<span style="line-height: 20.7999992370605px;">принимать подключения&nbsp;</span>на всех доступных локальных IP-адресах и TCP-порту 8000</li>
 
<li>'''<tt>[http://127.0.0.1:8000 http://127.0.0.1:8000]</tt>'''&nbsp;- принимать подключения только локально&nbsp;(обычно используется, когда приложение, которое работает со службой, установлено на том же компьютере, что и служба. При этом запросы, идущие через сетевые карты - будут игнорироваться в целях безопасности.&nbsp;Типичный пример - установка службы на сервере 1С:Предприятия.)</li>
 
</ul>
 
 
|-
 
| style="width: 137px;" | common-directory<br/>
 
| style="width: 1084px;" colspan="2" | каталог с общими данными (структура каталога аналогична каталогу [[AutoGRAPH.NET|AutoGRAPH.NET]] – с подкаталогами Schemes, GeoFences, Devices в которых находятся соответствующие файлы схем, геозон, приборов)
 
|-
 
| style="width: 137px;" | data-directory<br/>
 
| style="width: 1084px;" colspan="2" | каталог данных (=data-каталог) [[AGDataLoader|AutoGRAPH DataLoader]] или [[AutoGRAPH_Server_5|AutoGRAPH Server 3.x или 4.x или 5.x]]
 
|-
 
| style="width: 137px;" | ddd-directory
 
| style="width: 1084px;" colspan="2" | каталог загруженных DDD-файлов (файлы карт тахографа)
 
|-
 
| style="width: 137px;" | users-directory[[File:Tag-new.png|RTENOTITLE]]<br/>
 
| style="width: 671px;" | Каталог с пользователями [[AutoGRAPH_Server_5|AutoGRAPH Server 4.x или 5.x]], обычно он называется Users
 
| style="width: 453px;" rowspan="2" colspan="1" | '''Если указаны эти параметры - в сервисе включается аутентификация и перед любым вызовом любого метода необходимо выполнить аутентификацию. Подробее о механизме аутентификации''' [[AutoGRAPH.NET_Service_Auth|здесь]].
 
|-
 
| style="width: 137px;" | devices-directory[[File:Tag-new.png|RTENOTITLE]]<br/>
 
| style="width: 671px;" | Каталог с пользователями [[AutoGRAPH_Server_5|AutoGRAPH Server 4.x или 5.x]], обычно он называется DBF
 
|}
 
После редактирования конфиг-файла можно запустить сервис (или консольно) и сделать запрос:<br/><pre>svcutil.exe http://localhost:800/?wsdl /async /tcv:Version35 /ser:DataContractSerializer
 
</pre>
 
 
<br/>В данном случае будет создан файл AutoGRAPHSvc.cs с прокси-классом для доступа к WCF-точке сервиса AutGRAPH.NET Service и '''output.config''' файл с описанием параметров подключения WCF. Файл '''output.config''' в данном случае не используется.
 
   
 
== Методы сервиса ==
 
== Методы сервиса ==

Версия 11:15, 19 октября 2015

Сервис предоставляет WCF/JSON API для доступа ядру расчетов AutoGRAPH.NET. Конфигурация схем выполняется с помощью диспетчерского ПО AutoGRAPH.NET. Работает в двух режимах – консольном и как сервис.

Минимальные требования к аппаратному и программному обеспечению

Загрузка

Последняя версия: 2015.10.19, http://agi.tk-chel.ru/install/service/AutoGRAPHService20151019.zip

Примеры: http://agi.tk-chel.ru/install/service/AutoGRAPHServiceExamples.zip

Режим консоли

В основном предназначен для отладки и тестирования. Достаточно просто запустить файл AutoGRAPHNETService.exe.

Режим сервиса

Устанавливается как сервис (служба) Windows и работает автономно. Командная строка для установки:

sc create AutoGRAPHNETService binPath= "C:\TK\WebMapK\Build-Svc\AutoGRAPHNETService.exe"

 между binPath= и полным путем - пробел 

Дальше

Конфигурация

Методы сервиса

  • Login RTENOTITLE – аутентификация и получение токена (в случае, если она включена)
  • EnumSchemas – получение списка доступных сервису схем
  • EnumDevices – получение списка устройств схемы
  • EnumDrivers – получение информации о водителях в схеме
  • EnumGeoFences – получение списка геозон схемы
  • GetGeoFences – получение информации о геозонах (точки для полигонов и т.д.)
  • EnumParameters – получение списка параметров устройства в схеме

Получение данных по приборам

  • GetDevicesInfo – получение информации об устройстве в схеме
  • GetOnlineInfo – получение информации о последнем местоположении устройств
  • GetOnlineInfoAll – получение информации о последнем местоположении всех устройств
  • GetDataRanges – получение информации о загруженных данных для приборов (минимальная/максимальные доступные даты)
  • GetTrips – получение информации о рейсах приборов с текущими настройками схемы
  • GetTripTables RTENOTITLE – получение табличных данных по рейсам приборов
  • GetTripsCustom – получение информации о рейсах приборов с указанными геозонами
  • GetStage – получение информации по одному отрезку для приборов
  • GetTrack – получение трека (даты/время, координаты, скорость) прибора

Доступ к свойствам

  • GetProperties – получение списка свойств и их значений устройства
  • GetProperty – получение значения одного свойства у списка приборов

Выполнение отчетов

  • EnumReports - получение списка доступных отчетов
  • GetReports - выполнение нескольких отчетов и загрузка его в виде XML/PDF/DOCX/XLS/.../ZIP-файла (формат выполнения указывается)
  • GetReport RTENOTITLE - выполнение одного отчета и загрузка его в виде XML/PDF/DOCX/XLS/.../ZIP-файла (формат выполнения указывается)
  • ExecuteReports - асинхронное выполнение отчета(ов)
  • GetReportsStatus - получение состояния выполнения отчета(ов)
  • CancelReports - отмена выполнения отчета

Получение информации из DDD-файлов тахографа

  • GetCardStatistic RTENOTITLE - получение информации по DDD-файлам указанной карты
  • GetCardStatisticAll RTENOTITLE - получение информации по всем доступным DDD-файлам
  • GetCardRecords RTENOTITLE - получение информации из DDD-файлов указанных карт

Прочее

  • GetRoute – прокладка маршрута и получение этой информации в виде набора точек
  • WaitData - ожидание получения новых данных

Также сервис поддерживает загрузку/выгрузку и получение списка схем. AutoGRAPH.NET начиная версии 2015.8.6 умеет работать с AutoGRAPH.NET Service как с веб-сервером. Подробнее здесь.

Примеры

Скачать проект для Visual Studio 2013/2015

Скачать результаты выполнения (.XML-файлы примера)

Скачать файл прокси-класса AutoGRAPHSvc.cs

Скачать примеры (консольные и WinForms): http://agi.tk-chel.ru/install/service/AutoGRAPHServiceExamples.zip

using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using AutoGRAPHService;

namespace AutoGRAPHSvcTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var svc = new AutoGRAPHSvcClient();            // создаем прокси-класс с адресом подключения по умолчанию

            RSchema[] schemas;
            using (var f = new TimeCalc("EnumSchemas"))    // запрашиваем список доступных схем
                schemas = svc.EnumSchemas();

            var currentSchema = schemas.FirstOrDefault(p => p.Name == "DemoCEBIT").Name;

            Guid[] currentDevices = null;
            using (var f = new TimeCalc("EnumDevices"))
            {
                var devices = svc.EnumDevices(currentSchema);
                foreach (var item in devices.Items)
                    Console.WriteLine("\t" + item.Name);
                currentDevices = devices.Items.Where(p => p.Serial == 9999999 || p.Serial == 9999998).Select(p => p.ID).ToArray(); // выбираем только приборы с номерами 9999998 и 9999999
            }

            using (var f = new TimeCalc("EnumGeoFences"))  // запрашиваем список доступных в схеме геозон
                svc.EnumGeoFences(currentSchema);

            using (var f = new TimeCalc("GetDevicesInfo"))
                svc.GetDevicesInfo(currentSchema);

            using (var f = new TimeCalc("EnumParameters")) // запрашиваем список параметров для ТС
                svc.EnumParameters(currentSchema, currentDevices);

            
            using (var f = new TimeCalc("GetOnlineInfo")) // запрашиваем онлайн-состояние ТС
            {
                var onlineInfo = svc.GetOnlineInfo(currentSchema, currentDevices);
                var serializer = new DataContractSerializer(typeof (ROnlineInfo));
                foreach (var oi in onlineInfo)
                {
                    var stm = new MemoryStream();
                    serializer.WriteObject(stm, oi.Value);
                    var fileName = "OnlineInfo_" + oi.Key + ".xml";
                    File.WriteAllBytes(fileName, stm.ToArray()); // записываем на диск в файл .xml сериализованное состояние
                    Console.WriteLine("OnlineInfo: {0}", fileName);
                }
            }

            using (var f = new TimeCalc("GetTrips")) // запрашиваем список рейсов за сегодня для ТС
            {
                var serializer = new DataContractSerializer(typeof (RTrips));
                var trips = svc.GetTrips(currentSchema, currentDevices, DateTime.Now.Date, DateTime.Now);
                foreach (var trip in trips)
                {
                    var stm = new MemoryStream();
                    serializer.WriteObject(stm, trip.Value);
                    var fileName = "Trips_" + trip.Key + ".xml";
                    File.WriteAllBytes(fileName, stm.ToArray()); // записываем на диск в файл .xml сериализованное состояние
                    Console.WriteLine("Trips: {0}", fileName);
                }
            }

            using (var f = new TimeCalc("GetTrack"))       // запрашиваем треки за последние 5 дней для всех ТС, с номерами начинающихся 9999998
            {
                var serializer = new DataContractSerializer(typeof(RTrackInfo[]));
                var tracks = svc.GetTrack(currentSchema, currentDevices, DateTime.Now.Date, DateTime.Now);
                foreach (var trip in tracks)
                {
                    var stm = new MemoryStream();
                    serializer.WriteObject(stm, trip.Value);
                    var fileName = "Tracks_" + trip.Key + ".xml";
                    File.WriteAllBytes(fileName, stm.ToArray()); // записываем на диск в файл .xml сериализованное состояние
                    Console.WriteLine("Tracks: {0}", fileName);
                }
            }
            Console.ReadLine();
        }
    }

    // простой класс для замера скорости выполнения блока
    class TimeCalc : IDisposable
    {
        readonly DateTime DT;
        readonly string name;
        internal TimeCalc(string name) { DT = DateTime.Now; this.name = name; }
        void IDisposable.Dispose() { Console.WriteLine(name + ": " + DateTime.Now.Subtract(DT).TotalSeconds.ToString("F3", CultureInfo.InvariantCulture)); }
    }
}

Скачать проект для Visual Studio 2013/2015

Скачать результаты выполнения (.XML-файлы примера)

По умолчанию используется HTTP binding, но ровно таким же способом можно включить и and Answers&referringTitle=Home=Home другие транспорты.

Диагностика неисправностей

Список возможных ошибок и особенностей конфигурации приведён здесь.