Добрый день! Продолжая поддерживать проект на RS, решил поделиться некоторыми наработками по интеграции.
Командой RS разработан модуль экспорта в SQL, который работает отлично на небольшом количестве каналов.
Однако при увеличении их числа (в моем случае 8 000), MySQL не всегда успевает обрабатывать такое количество INSERT, да и сам сервер RS не всегда за цикл успевает сформировать команду на вставку в базу.
(да можно настроить MySQL сервер, но тренды не всегда должны быть быстродоступны).
Предлагаю на суд метод WebService для получения тренда канала в формате JSON для сторонних систем.
/// <summary>
/// Получить trend по CnlNum и DateTime
/// </summary>
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void ReceiveTrend(int cnlNum, string dt)
{
MainData MD = new MainData();
MD.SettingsFileName = "CommSettings.xml";
MD.RefreshData();
Trend tr = new Trend(cnlNum);
MD.ServerComm.ReceiveTrend("Trend", Convert.ToDateTime(dt), tr);
MD.ServerComm.Close();
this.Context.Response.ContentType = "application/json; charset=utf-8";
this.Context.Response.Write(new JavaScriptSerializer().Serialize(tr.Points));
}
В ответ получим:
[
{
DateTime: «/Date(1455130800000)/»,
Val: 67.77223205566406,
Stat: 13
},
{
DateTime: «/Date(1455131400000)/»,
Val: 65.7049331665039,
Stat: 13
}
]
/Date(1455131400000)/ — таким образом в .Net сериализация Даты для передачи в JSON, штатными методами.
В своем проекте читаемую дату я получаю, так :
function (obj) {
var date = moment(obj.Date);
return date.format(«DD.MM.YYYY HH:mm»);
}
В примере использую отличный Framework Moment.js
Надеюсь эта информация сэкономит кому-нибудь время.