• Передача сообщения через SignalR. Как сделать однократное соединение с сервером?

    Lapish72
    @Lapish72
    Нет примера вызова методов из вашего класса, но могу предположить, что вы каждый раз инициализируете его. Вам нужно сделать ваш класс Singleton'ом. Для этого в Startup ConfigureServices зарегистрируйте ваш сервис:
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<ВашСервис>();
        }
    }

    И затем в Program:
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
            var service = host.Services.GetRequiredService<ВашСервис>();
            service.ConnectToServer(); //Подключаемся к SignalR
    
            host.Run();
        }
    }


    UPD:
    Советую поменять название класса на более общее, например, SignalrService, а метод SendToSignalR на Connect.
    Ответ написан
    6 комментариев
  • Как на камерах Hiwatch настроить оповещения на email?

    @srg_vk
    На камерах Hiwatch/HikVision интересная штука - под пароль отводится 16 символов, а mail.ru генерирует 20.
    На все просьбы исправить это - 0 эмоций, что со стороны Hiwatch/HikVision, что со стороны mail.ru.
    Решение:
    Создаем ящик на yandex.ru - для сторонних приложений генерируется пароль в 16 символов и наслаждаемся сообщениями от камер.
    Ответ написан
    1 комментарий
  • Mikrotik DHCP server?

    @Ovsiannikov
    1. в настройках dhcp-server включить "add arp for leases"
    2. в настройках интерфейса к которому подключены юсеры настроить arp - "reply-only"
    как результат - работать смогут либо пользователи получившие адрес по дхцп, либо для которых прописана статическая АРП запись.
    Ответ написан
    Комментировать
  • Как отключить автоматическую отмену сделанных изменений?

    Adler_lug
    @Adler_lug
    А файлы проекта где хранятся?
    Что-то похожее наблюдал, когда проект был на примонтированном облачном диске (Mega) и он из-за какого то глюка постоянно файл синхронизировал с облака.
    Ответ написан
    5 комментариев
  • Жёсткие диски "для видеонаблюдения": реальная необходимость или маркетинг?

    fdroid
    @fdroid
    press any key
    1) У Purple отключена парковка, которая для дисков, использующихся в видеонаблюдении, нужна как зайцу стоп-сигнал.
    2) Purple подходят для использования в RAID-массивах опять же из-за отключенной парковки, а также за счёт поддержки TLER.
    3) Есть ещё какие-то оптимизации в прошивке, связанные именно с заточкой под видеонаблюдение. Где читал - искать лень, сами нагуглите при интересе.
    Ответ написан
    3 комментария
  • Как экспортировать C# проект одним .exe?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Если у вас .net Core (или .net 5+), то сделайте Single file application
    Если у вас .net Framework, то используйте Costura.Fody
    Ответ написан
    Комментировать
  • Из-за чего checkbox не реагирует на нажатия?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Не забываем, что id должен быть уникален для каждого чекбокса и соотверственно лейбы, связанной с ним.
    Поэтому более интересным решением будет подобная разметка
    <label class="checkbox">
    	<input type="checkbox">
    	<span class="label_text">Я переключаю чекбокс</span>
    </label>

    С последующей стилизацией елемента label_text
    Вот статья
    https://dimox.name/custom-checkboxes-and-radio-but...
    Ответ написан
    Комментировать
  • Почему не происходит десериализация json?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Я попробовал запустить ваш код у себя. У меня такое же поведение.
    Видимо, по-умолчанию System.Text.Json не применяет никаких автоматических конвертаций имён.
    Указал JsonPropertyName и всё заработало.

    using System;
    using System.Text.Json;
    using System.Text.Json.Serialization;
    
    var json = "{\"id\":1,\"number\":42,\"bagGUID\":null}";
    var data = JsonSerializer.Deserialize<Barcode>(json);
    Console.WriteLine(data!.ToString()); // выведет "Barcode { Id = 1, Number = 42, BagGuid =  }"
    
    record Barcode
    {
        [JsonPropertyName("id")]
        public int Id { get; init; }
        [JsonPropertyName("number")]
        public int Number { get; init; }
        [JsonPropertyName("bagGUID")]
        public Guid? BagGuid { get; init; }
    }
    Ответ написан
    1 комментарий
  • Какие SFP модули выбрать для соединения HP и D-Link?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если у Вас имеется только одно волокно - Вы ограничены только WDM-модулями. Для одномодового волокна, как Вы сообщаете.

    WDM модули передают на одной длине волны, принимают на другой. Соответственно нужна пара модулей, у которых длины волн совпадают "накрест" - один модуль на некоей волне вещает, второй слушает. И наоборот. Если при этом у них ещё и скорости совпадают, то будет между ними мир, трафик и счастье... и, как правило, плевать на вендора, у меня работали (а кое-где и сейчас работают) комплементарные пары самых диких сочетаний.

    Не, это ещё пока полдела. SFP-модуль - это достаточно неглупая машинка. И, чтобы она правильно и успешно работала в коммутаторе, она должна быть соотв. образом прошита. И вот тут у меня для Вас плохие новости - если D-Link достаточно "всеядны", и SPF с ними уживаются, как правило, "искаропки", то вот оборудование HP отличается в этом смысле изрядной капризностью. И надо проверять конкретный коммутатор и конкретный SFP - заведётся ли одно в другом, или нет. Но тут либо экспериментально, либо при приобретении чётко указывать, что SFP будет работать в HP.
    Ответ написан
    6 комментариев
  • Совместимы ли HP 1910-8 (JG536A) и SFP от DLink?

    ProstoTyoma
    @ProstoTyoma Автор вопроса
    С запозданием отвечу сам. Работает без проблем и с гигабитными DEM330 и со 100М DEM220.
    Ответ написан
    Комментировать
  • Какой sfp модуль выбрать?

    karabanov
    @karabanov
    Системный администратор
    Попутал местами цвета и длины волн, теперь всё исправил.

    Если с одной стороны модуль жёлтый или фиолетовый TX1550 и RX1310, то с другой стороны модуль синий TX1310 и RX1550.
    TX - передача от английского transmit
    RX - приём от английского recive

    У вас может и не заработать с SFP, так как на той стороне возможно тоже стоит медиаконвертер, а он на 100 мегабит, то есть вам придётся играться с дуплексом и скоростью. Справедливо и обратное, возможно провайдер настраивает скорость и дуплекс на оптическом порту своего коммутатора в который вставлена SFP-шка, а абоненту ставит такой медиаконвертер.

    И да, тип разъёма у этого медиаконвертера SC, значит и SFP-шка должна быть SC, а не LC иначе придётся патчкорд менять.

    Если у вас должен быть вот точно такой медиаконвертер, ка на картинке, то вам нужна жёлтая или фиолетовая SFP-шка Tx:1550/Rx:1310 разъём SC вместо этого медиаконвертера такая же как этот медиаконвертер (ну под картинкою написано Конвертер UTP to fiber, 100Мбит/c, WDM, SM, SC, Tx:1550/Rx:1310, 20 км)

    Вот такая:
    SFP-1M-20SC-B1.pngSFP-G-20SCDP-B2.png
    Ответ написан
    7 комментариев
  • Как написать скрипт на Mikrotik-e для автоматического отключения и включение Layer 7 Protokol-а?

    @smesh
    Сами ключи 7 уровня не могут отключаться, но можно отключить правила которые на него ссылаются(если правило\правила отключены пакеты не обрабатываются ключами и нагрузки на аппаратную часть нет).
    Соответственно делаем скрипты отключающий\включающий нужные правила, и запихиваем скрипты в шедулер, что-бы они выполнялись попеременно с интервалом в 10 минут.

    (UPD - готовое решение)

    1) Отмечаем нужное правило уникальным коментом.
    Для примера будем рассматривать правила в Filter Rules и пометим нужные коментом "RulesF".
    2) Создаем скрипты из консоли:
    system script add name="Layer7-disable" source="/ip firewall filter set [find comment="RulesF"] disabled=yes"

    и
    system script add name="Layer7-enable" source="/ip firewall filter set [find comment="RulesF"] disabled=no"

    Скрипт "Layer7-disable" выключает все правила в Filter rules с коментом "RulesF", а скрипт "Layer7-enable" - включает.
    3) Создаем задачи в шедулере из консоли:
    system scheduler add name="Layer7-disable" start-date=Jan/01/2019 start-time=00:10:00 interval=00:20:00 on-event="/system script run Layer7-disable"

    и
    system scheduler add name="Layer7-enable" start-date=Jan/01/2019 start-time=00:00:00 interval=00:20:00 on-event="/system script run Layer7-enable"

    Правила будут выполняться попеременно с интервалом в 10 минут.
    Ответ написан
    9 комментариев
  • Flying Bear Ghost 4S почему нет подачи филамента?

    @MarkusD
    все время мелю чепуху :)
    Дело оказалось в порядке полярностей на шлейфе сервы. Обычно серва мечется вместо плавного вращения тогда, когда одна ее обмотка толкает в противоположную другой обмотке сторону.
    В этом случае стоит проследить чтобы последовательность пинов на выходе совпадала с последовательностью на входе.
    Подключение Nema 17 для примера
    nodemcu-esp8266-12-e-controlling-stepper-motor-over-wifi_orig.png
    Ответ написан
    Комментировать
  • Xamarin Forms как сделать навигацию по трем и более страницам?

    @relov
    Разрабатываю на c#
    App.cs
    MainPage = new NavigationPage(new MainPage());
    далее навигация осуществляется следующим образом:
    await Navigation.PushAsync(new Page1());
    Подробнее можно почитать в доке https://docs.microsoft.com/ru-ru/xamarin/xamarin-f...
    PS, рекомендую ознакомиться так же с Shell которая так же позволяет осуществлять навигацию
    https://docs.microsoft.com/ru-ru/xamarin/xamarin-f...
    Ответ написан
    Комментировать
  • Как передать телеграм боту число?

    Преобразовать строку, введённую пользователем в число с помощью int.Parse?
    Ответ написан
    1 комментарий
  • C# com-порт получение информации, обработка старт-бита, стоп-бита?

    @vitvov
    Если я правильно понял ваш вопрос, то ваше устройство шлёт постоянно данные и вам нужно только читать.
    Все что вам нужно, это создать подключение к порту и подписаться на событие обновления. При возникновении события вы получите массив данных с порта, этот массив вы сохраняете в буфер или разбираете на лету (как вам удобнее). Напишу для вас маленький пример:
    //  Наследуем наш клас от SerialPort для более красивого кода
    public class MySerialPort : SerialPort
    {
            private const int DataSize = 54;    //  я так и не понял, какой размер данных нужен. Укажите правильное число в байтах
            private readonly byte[] _bufer = new byte[DataSize];
            private int _stepIndex;
            private bool _startRead;
    
            public MySerialPort(string port)
                : base()
            {
                //  все папаметры вы должны указать в соответствии с вашим устройством
                //base.PortName = COM1;
                base.BaudRate = 115200;
                base.DataBits = 8;
                base.StopBits = StopBits.Two;
                base.Parity = Parity.None;
                base.ReadTimeout = 1000;
    
                //  тут подписываемся на событие прихода данных в порт
                //  для вашей задачи это должно подойт идеально
                base.DataReceived += SerialPort_DataReceived;
            }
    
            //  открываем порт передав туда имя
            public void Open(string portName)
            {
                if (base.IsOpen)
                {
                    base.Close();
                }
                base.PortName = portName;
                base.Open();
            }
    
            //  эта функция вызвется каждый раз, когда в порт чтото будет передано от вашего устройства
            void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                var port = (SerialPort)sender;
                try
                {
                    //  узнаем сколько байт пришло
                    int buferSize = port.BytesToRead;
                    for (int i = 0; i < buferSize; ++i)
                    {
                        //  читаем по одному байту
                        byte bt = (byte)port.ReadByte();
                        //  если встретили начало кадра (0xFF) - начинаем запись в _bufer
                        if (0xFF == bt)
                        {
                            _stepIndex = 0;
                            _startRead = true;
                            //  раскоментировать если надо сохранять этот байт
                            //_bufer[_stepIndex] = bt;
                            //++_stepIndex;
                        }
                        //  дописываем в буфер все остальное
                        if (_startRead)
                        {
                            _bufer[_stepIndex] = bt;
                            ++_stepIndex;
                        }
                        //  когда буфер наполнлся данными
                        if (_stepIndex == DataSize && _startRead)
                        {
                            //  по идее тут должны быть все ваши данные.
    
                            //  .. что то делаем ...
                            //  var item = _bufer[7];
    
                            _startRead = false;
                        }
                    }
                }
                catch {}
            }
    }

    использовать это нужно так:
    var port = new MySerialPort();
    port.Open("COM5");

    Это код прототипа, всего лишь техника работы которая может помочь вам.
    Ответ написан
    2 комментария
  • Netwatch и отключение интерфейсов. Или что я делаю не так?

    karabanov
    @karabanov
    Системный администратор
    Можно попробовать прошивку модема обновить:
    /interface lte firmware-upgrade lte1 upgrade=yes
    И как обновится сказать:
    /interface lte at-chat lte1 input="AT+reset"
    Ответ написан
    1 комментарий
  • Как на камерах Hiwatch настроить оповещения на email?

    deepblack
    @deepblack
    На Hikvision немного отличается интерфейс:
    5e429b056b9bf847988274.png

    Как вариант (если с Гуглом не получится) попробовать отправлять через Яндекс.Почту
    Ответ написан
    2 комментария
  • Почему регулярное выражение работает не так, как на Regex101?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Обратите внимание, что на regex101 включен флаг Multiline - чтобы у вас оно также работало, вам тоже надо его выставить:
    var myRegex = new Regex(@"4,|, 4$|^ 4$", RegexOptions.Multiline);

    https://docs.microsoft.com/ru-ru/dotnet/standard/b...
    А вообще вы немного неправильно используете регулярные выражения - вашу задачу можно было бы решить через Split и Contains
    Ответ написан
    3 комментария
  • EF Core Загрузка трёх и более сущностей. Как правильно?

    @kttotto
    пофиг на чем писать
    1.
    Есть просто номер, который соответствует id в таблице Скана.

    Где есть номер, в какой таблице? Какая-то же связь должна быть между сотрудником и договором? Иначе просто будет невозможно соотнести запись договора с записью сотрудника.

    2. Не лучшее решение на вьюшку отдавать entity сущность. Лучше добавить модель DetailsViewModel, которую Вы заполните данными как хотите. Например
    var detailsViewModel = db.employees.Include(ep => ep.Position)                
    			.Where(j => j.Id == id)
    			.Select(emp => new EmploeeViewModel
    			{
    				Name = emp.Name,
    				Position = emp.Position,
    				Сontract = db.Contract.FirstOrDefault(c => c.Id == emp.ContractId)
    			}.FirstOrDefault();
    			
    return View(detailsViewModel);
    Ответ написан
    1 комментарий