AutoGRAPH.NET Service — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 88: | Строка 88: | ||
<code> // простой класс для замера скорости выполнения блока<br/> class TimeCalc:IDisposable<br/> {<br/> readonly DateTime DT;<br/> readonly string name;<br/> internal TimeCalc(string name) { DT = DateTime.Now; this.name = name; }<br/> void IDisposable.Dispose() { Console.WriteLine(name+": "+DateTime.Now.Subtract(DT).TotalSeconds.ToString("F3", CultureInfo.InvariantCulture)); }<br/> }<br/>}</code> |
<code> // простой класс для замера скорости выполнения блока<br/> class TimeCalc:IDisposable<br/> {<br/> readonly DateTime DT;<br/> readonly string name;<br/> internal TimeCalc(string name) { DT = DateTime.Now; this.name = name; }<br/> void IDisposable.Dispose() { Console.WriteLine(name+": "+DateTime.Now.Subtract(DT).TotalSeconds.ToString("F3", CultureInfo.InvariantCulture)); }<br/> }<br/>}</code> |
||
− | <u>Файл .exe.config вышеприведенного примера</u><br/><code><?xml version="1.0" encoding="utf-8" ?><br/><configuration><br/> <system.serviceModel><br/> <bindings><br/> <basicHttpBinding><br/> <binding name="BasicHttpBinding_IAutoGRAPHSvc" closeTimeout="00:01:00"<br/> openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"<br/> allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"<br/> maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"<br/> messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"<br/> useDefaultWebProxy="true"><br/> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" /><br/> <security mode="None"><br/> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /><br/> <message clientCredentialType="UserName" algorithmSuite="Default" /><br/> </security><br/> </binding><br/> </basicHttpBinding><br/> </bindings><br/> <client><br/> <endpoint address="[http://localhost:800/ http://localhost:800/]" binding="basicHttpBinding"<br/> bindingConfiguration="BasicHttpBinding_IAutoGRAPHSvc" contract="IAutoGRAPHSvc"<br/> name="BasicHttpBinding_IAutoGRAPHSvc" /><br/> </client><br/> </system.serviceModel><br/></configuration>< |
+ | <u>Файл .exe.config вышеприведенного примера</u><br/><code><?xml version="1.0" encoding="utf-8" ?><br/><configuration><br/> <system.serviceModel><br/> <bindings><br/> <basicHttpBinding><br/> <binding name="BasicHttpBinding_IAutoGRAPHSvc" closeTimeout="00:01:00"<br/> openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"<br/> allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"<br/> maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"<br/> messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"<br/> useDefaultWebProxy="true"><br/> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" /><br/> <security mode="None"><br/> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /><br/> <message clientCredentialType="UserName" algorithmSuite="Default" /><br/> </security><br/> </binding><br/> </basicHttpBinding><br/> </bindings><br/> <client><br/> <endpoint address="[http://localhost:800/ http://localhost:800/]" binding="basicHttpBinding"<br/> bindingConfiguration="BasicHttpBinding_IAutoGRAPHSvc" contract="IAutoGRAPHSvc"<br/> name="BasicHttpBinding_IAutoGRAPHSvc" /><br/> </client><br/> </system.serviceModel><br/></configuration></code><br/> |
− | Данный конфигурационный файл содержит WCF-конфигурацию для точки подключения сервиса. По умолчанию используется HTTP binding, но ровно таким [https://msdn.microsoft.com/en-us/library/ms733027(v=vs.110).aspx же способом] можно включить и [http://wcfsecurity.codeplex.com/wikipage?title=Questions |
+ | Данный конфигурационный файл содержит WCF-конфигурацию для точки подключения сервиса. По умолчанию используется HTTP binding, но ровно таким [https://msdn.microsoft.com/en-us/library/ms733027(v=vs.110).aspx же способом] можно включить и [http://wcfsecurity.codeplex.com/wikipage?title=Questions%20and%20Answers&referringTitle=Home=Home другие транспорты]. |
Версия 14:48, 15 апреля 2015
Сервис предоставляет WCF/JSON API для доступа ядру расчетов AutoGRAPH.NET. Конфигурация схем выполняется с помощью диспетчерского ПО AutoGRAPH.NET. Работает в двух режимах - консольном и как сервис.
Содержание
Минимальные требования к аппаратному и программному обеспечению
- RAM - от 1 GB
- Windows 2003 или более новая
- .NET Framework 4.0 или более новый
- установленный загрузчик данных (AutoGRAPH DataLoader) или AutoGRAPH Server 3.x или 4.x или 5.x
Режим консоли
В основном предназначен для отладки и тестирования. Достаточно просто запустить файл 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. |
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, но ровно таким же способом можно включить и другие транспорты.