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

Материал из TK
Перейти к: навигация, поиск
Строка 6: Строка 6:
 
*Windows 2003 или более новая
 
*Windows 2003 или более новая
 
*.NET Framework 4.0 или более новый
 
*.NET Framework 4.0 или более новый
*установленный загрузчик данных ([[AGDataLoader|AutoGRAPH DataLoader]]) или [[AutoGRAPH_Server_5|AutoGRAPH Server 3.x или 4.x или 5.x]]
+
*установленный загрузчик данных ([[AGDataLoader|AutoGRAPH DataLoader]]) или [[AutoGRAPH Server 5|AutoGRAPH Server 3.x или 4.x или 5.x]]
   
 
== Режим консоли ==
 
== Режим консоли ==
Строка 60: Строка 60:
 
== Методы сервиса ==
 
== Методы сервиса ==
   
*[[AutoGRAPH.NET_Service_EnumSchemas|EnumSchemas]] - получение списка доступных сервису схем
+
*[[AutoGRAPH.NET Service EnumSchemas|EnumSchemas]] - получение списка доступных сервису схем
*[[AutoGRAPH.NET_Service_EnumDevices|EnumDevices]] - получение списка устройств (приборов) схемы
+
*[[AutoGRAPH.NET Service EnumDevices|EnumDevices]] - получение списка устройств (приборов) схемы
*[[AutoGRAPH.NET_Service_EnumGeoFences|EnumGeoFences]] - получение списка геозон схемы
+
*[[AutoGRAPH.NET Service EnumGeoFences|EnumGeoFences]] - получение списка геозон схемы
*[[AutoGRAPH.NET_Service_GetDevicesInfo|GetDevicesInfo]] - получение информации об устройстве (приборе) в схеме
+
*[[AutoGRAPH.NET Service GetDevicesInfo|GetDevicesInfo]] - получение информации об устройстве (приборе) в схеме
*[[AutoGRAPH.NET_Service_EnumParameters|EnumParameters]] - получение списка параметров устройства (прибора) в схеме
+
*[[AutoGRAPH.NET Service EnumParameters|EnumParameters]] - получение списка параметров устройства (прибора) в схеме
*[[AutoGRAPH.NET_Service_GetOnlineInfo|GetOnlineInfo]] - получение информации о последнем местоположении устройств (приборов)
+
*[[AutoGRAPH.NET Service GetOnlineInfo|GetOnlineInfo]] - получение информации о последнем местоположении устройств (приборов)
*[[AutoGRAPH.NET_Service_GetTrips|GetTrips]] - получение информации о рейсах устройства (прибора) с текущими настройками схемы
+
*[[AutoGRAPH.NET Service GetTrips|GetTrips]] - получение информации о рейсах устройства (прибора) с текущими настройками схемы
*[[AutoGRAPH.NET_Service_GetTrack|GetTrack]]&nbsp;- <span style="line-height: 20.7999992370605px;">получение трека (даты/время, координаты, скорость)&nbsp;устройства (прибора) с текущими настройками схемы</span>
+
*[[AutoGRAPH.NET Service GetTrack|GetTrack]]&nbsp;- <span style="line-height: 20.7999992370605px;">получение трека (даты/время, координаты, скорость)&nbsp;устройства (прибора) с текущими настройками схемы</span>
*[[AutoGRAPH.NET_Service_GetProperties|GetProperties]]&nbsp;- получение списка свойств и их значений устройства (прибора)
+
*[[AutoGRAPH.NET Service GetProperties|GetProperties]]&nbsp;- получение списка свойств и их значений устройства (прибора)
*[[AutoGRAPH.NET_Service_GetProperty|GetProperty]]&nbsp;-&nbsp;<span style="line-height: 20.7999992370605px;">получение значения одного свойства у списка приборов</span>
+
*[[AutoGRAPH.NET Service GetProperty|GetProperty]]&nbsp;-&nbsp;<span style="line-height: 20.7999992370605px;">получение значения одного свойства у списка приборов</span>
*[[AutoGRAPH.NET_Service_GetRoute|GetRoute]]&nbsp;- прокладка маршрута и получение этой информации в виде набора точек
+
*[[AutoGRAPH.NET Service GetRoute|GetRoute]]&nbsp;- прокладка маршрута и получение этой информации в виде набора точек
   
 
== Примеры ==
 
== Примеры ==
Строка 138: Строка 138:
 
<?xml version="1.0" encoding="utf-8" ?>
 
<?xml version="1.0" encoding="utf-8" ?>
 
<configuration>
 
<configuration>
<system.serviceModel>
+
<system.serviceModel>
<bindings>
+
<bindings>
<basicHttpBinding>
+
<basicHttpBinding>
<binding name="BasicHttpBinding_IAutoGRAPHSvc" closeTimeout="00:01:00"
+
<binding name="BasicHttpBinding_IAutoGRAPHSvc" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
+
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
+
maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
+
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
+
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
+
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
+
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
+
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
+
</security>
</binding>
+
</binding>
</basicHttpBinding>
+
</basicHttpBinding>
</bindings>
+
</bindings>
<client>
+
<client>
<endpoint address="http://localhost:800/" binding="basicHttpBinding"
+
<endpoint address="http://localhost:800/" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IAutoGRAPHSvc" contract="IAutoGRAPHSvc"
+
bindingConfiguration="BasicHttpBinding_IAutoGRAPHSvc" contract="IAutoGRAPHSvc"
name="BasicHttpBinding_IAutoGRAPHSvc" />
+
name="BasicHttpBinding_IAutoGRAPHSvc" />
</client>
+
</client>
</system.serviceModel>
+
</system.serviceModel>
 
</configuration>
 
</configuration>
 
</pre>
 
</pre>
   
 
Данный конфигурационный файл содержит WCF-конфигурацию для точки подключения сервиса. По умолчанию используется HTTP binding, но ровно таким [https://msdn.microsoft.com/en-us/library/ms733027(v=vs.110).aspx же способом]&nbsp;можно включить и [http://wcfsecurity.codeplex.com/wikipage?title=Questions and Answers&referringTitle=Home=Home другие транспорты].
 
Данный конфигурационный файл содержит WCF-конфигурацию для точки подключения сервиса. По умолчанию используется HTTP binding, но ровно таким [https://msdn.microsoft.com/en-us/library/ms733027(v=vs.110).aspx же способом]&nbsp;можно включить и [http://wcfsecurity.codeplex.com/wikipage?title=Questions and Answers&referringTitle=Home=Home другие транспорты].
  +
  +
Диагностика неисправностей
  +
  +
<span style="line-height: 20.7999992370605px;">В случае возникновения ошибок при работе или запуске - рекомендуется включить&nbsp;</span>[http://wiki.tk-chel.ru/Режим диагностики (сетевой уровень) .NET приложений режим диагностики]

Версия 00:08, 16 апреля 2015

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

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

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

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

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

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

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

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

Описание работы

После распаковки AutoGRAPH.NET Service в какой-нибудь каталог необходимо отредактировать файл AutoGRAPHNETService.exe.config. Далее приведены описания ключей файла конфигурации:

<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"/>
key-file файл ключа .agkey (от AutoGRAPH.Server), который разрешает использования для прописанного списка приборов.Обязательный параметр!  Без него сервис работать не будет.
address

локальный адрес/точка биндинга в формате url:port, в настоящий момент протестирован только механизм httpBinding.
Ещё один пример точки биндинга - http://*:80/ - слушать 80й порт на всех интерфейсах

address-json локальный адрес/точка биндинга в формате url:port для JSON
common-directory
каталог с общими данными (структура каталога аналогична каталогу AutoGRAPH.NET - с подкаталогами Schemes, GeoFences, Devices в которых находятся соответствующие файлы схем, геозон, приборов)
data-directory
каталог данных (=data-каталог) AutoGRAPH DataLoader или AutoGRAPH Server 3.x или 4.x или 5.x

После редактирования конфиг-файла можно запустить сервис (или консольно) и сделать запрос:

svcutil.exe http://localhost:800/?wsdl /async /tcv:Version35 /ser:DataContractSerializer


В данном случае будет создан файл AutoGRAPHSvc.cs с прокси-классом для доступа к WCF-точке сервиса AutGRAPH.NET Service и output.config файл с описанием параметров подключения WCF. Файл output.config в данном случае не используется.

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

  • EnumSchemas - получение списка доступных сервису схем
  • EnumDevices - получение списка устройств (приборов) схемы
  • EnumGeoFences - получение списка геозон схемы
  • GetDevicesInfo - получение информации об устройстве (приборе) в схеме
  • EnumParameters - получение списка параметров устройства (прибора) в схеме
  • GetOnlineInfo - получение информации о последнем местоположении устройств (приборов)
  • GetTrips - получение информации о рейсах устройства (прибора) с текущими настройками схемы
  • GetTrack - получение трека (даты/время, координаты, скорость) устройства (прибора) с текущими настройками схемы
  • GetProperties - получение списка свойств и их значений устройства (прибора)
  • GetProperty - получение значения одного свойства у списка приборов
  • GetRoute - прокладка маршрута и получение этой информации в виде набора точек

Примеры

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
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();                // запрашиваем список доступных схем

            REnumDevices devices;
            using (var f = new TimeCalc("EnumDevices")) devices = svc.EnumDevices(schemas[0].Name); // запрашиваем список доступных в схеме приборов
            foreach (var item in devices.Items) Console.WriteLine("\t" + item.Name);

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

            // запрашиваем список параметров для всех ТС в схеме
            using (var f = new TimeCalc("EnumParameters")) svc.EnumParameters(schemas[0].Name, devices.Items.Select(p => p.ID).ToArray());

            // запрашиваем онлайн-состояние всех ТС в схеме
            using (var f = new TimeCalc("GetOnlineInfo")) svc.GetOnlineInfo(schemas[0].Name, devices.Items.Select(p => p.ID).ToArray());

            // запрашиваем список рейсов за последние 5 дней для всех ТС, с номерами начинающихся 9999998
            using (var f = new TimeCalc("GetTrips"))
                svc.GetTrips(schemas[0].Name,
                    devices.Items.Where(p => p.Serial >= 9999998).Select(p => p.ID).ToArray(),
                    DateTime.Now.AddDays(-5), DateTime.Now);

            // запрашиваем треки (с координатами и скоростями) за последние 5 дней для всех ТС, с номерами начинающихся 9999998
            using (var f = new TimeCalc("GetTrack"))
            {
                var t1 = svc.GetTrack(schemas[0].Name,
                    devices.Items.Where(p => p.Serial >= 9999998).Select(p => p.ID).ToArray(),
                    DateTime.Now.AddDays(-5), DateTime.Now);                
            }

            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)); }
    }
}

Файл .exe.config вышеприведенного примера

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.serviceModel>
 <bindings>
 <basicHttpBinding>
 <binding name="BasicHttpBinding_IAutoGRAPHSvc" closeTimeout="00:01:00"
 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
 allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
 maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
 messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
 useDefaultWebProxy="true">
 <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
 <security mode="None">
 <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
 <message clientCredentialType="UserName" algorithmSuite="Default" />
 </security>
 </binding>
 </basicHttpBinding>
 </bindings>
 <client>
 <endpoint address="http://localhost:800/" binding="basicHttpBinding"
 bindingConfiguration="BasicHttpBinding_IAutoGRAPHSvc" contract="IAutoGRAPHSvc"
 name="BasicHttpBinding_IAutoGRAPHSvc" />
 </client>
 </system.serviceModel>
</configuration>

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

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

В случае возникновения ошибок при работе или запуске - рекомендуется включить диагностики (сетевой уровень) .NET приложений режим диагностики