• Как задать собственные namespace'ы для дочерних элементов при сериализации в XML?

    @cicatrix
    AleDv, А в чём проблема-то? Для одного запроса один префикс, для другого-другой
    Кстати, у вас опечатка:
    <AnotherRequest>
      <Header xmlns:v1="http://site.com">
        <v2:Sender />
        <v2:Reciever />
      </Header>
    </AnotherRequest>

    Вместо v2 должно быть v1

    Именно для того, чтобы атрибутами не метить жёстко каждый тэг, используйте менеджер.
    Покажите, код, где генерится сам Header
  • Можно ли создать в C# иерархический класс?

    @cicatrix
    Захаров Александр, Памяти много, это хорошо, но десериализация JSON, тоже не "бесплатна", и не забудьте, что под каждое свойство ваша сборка будет иметь нехилый такой объём метаданных, эти ваши свойства описывающих. (Assembly/PropertyInfo)
    К тому же, если это не "хай лоад", то разговор о накладных расходах можно даже не начинать. Это миллисекунды в любом случае.
    Ваше желание синтаксического сахара понятно, но и здесь коллекция свойств вам будет более удобна. Ведь сделать вам такой класс, например, и будет вам счастье:
    static class PropNames
    {
        public const string Name = "Name";
        public const string Weight = "Weight"
        // ...
    }
    
    ...
    obj.GetValue(PropNames.Weight)

    А если чуть заморочиться, то можно каждое значение ещё и в обёрточку обернуть и операторы для этой обёртки перегрузить, чтобы лишними приведениями типов не заниматься.
  • SignalR вызывает метод OnDisconnectedAsync после остановки приложения, а не после отключение пользователя?

    @cicatrix
    Vlad _, Ну, бубен - так бубен. Добавьте свой RoleProvider, где будет роль 'SimpleUser' ну и расширтье AuthorizeAttribute до своей реализации, чтобы авторизация как бы была.
    Сатанинство это всё, но если работает...

    public class AppRoleProvider : RoleProvider { ... }
    public class MyAuthorizeAttribute : AuthorizeAttribute { ... }

    Потом уже:
    [MyAuthorize(Roles = "Admin, SimpleUser")]
  • C# как передать значение обратно из 2 подряд inteface?

    @cicatrix
    Вижу использование CookieBehavior, но не вижу - CookieMessageInspector.
    Кстати, а просто как public её объявить не судьба?
  • SignalR вызывает метод OnDisconnectedAsync после остановки приложения, а не после отключение пользователя?

    @cicatrix
    За ASP.Net Core не скажу, в ASP.Net закрытие сеанса не фиксируется, если состояние сессии не сконфигурировано в режим InProc. Если настроен StateServer или SqlServer или Custom, то окончание сеанса детерминированно, как я понял, не отлавливается.
  • Что делать, если не срабатывает нажатие на кнопку?

    @cicatrix
    Urope, Я ж написал, причин может быть несколько.
    1. Запрос вообще не уходит от браузера
    2. Запрос приходит на веб-сервер, но до до контроллера не доходит

    Диагностика по первому вопросу - смотрим HTML-код, который сгенерировало приложение, особенно внимание обращаем на то, что написано в поле action формы.
    Если всё верно, жмём кнопку и изучаем содержимое запроса из браузера (хром, фокс) жмём F12, вкладка Сеть (Network). Или специальным дебаггером (Fiddler, например).
    Если запрос уходит и корректный - метод POST, путь /Home/Index
    То встраиваем Middleware (класс в пред. комменте) и ловим событие прихода запроса туда.
    Смотрим context, сопоставляем с правилами роутинга (я смотрел, на первый взгляд всё верно, но всё может быть).
  • Что делать, если не срабатывает нажатие на кнопку?

    @cicatrix
    Urope,
    Таскать ваш проект, увы, желания нет, но есть желание помочь.
    Начинаем от печки: смотрим код страницы, которая получена в браузере.
    Потом проверяем (из браузера через F11 или через Fiddler) , а действительно ли POST-запрос уходит. Смотрим, а что именно в запросе содержится
    Потом уже на сервере проверяем - а действительно ли запрос приходит.
    В принципе, для диагностики можно вот такой вот класс сделать:

    public class MyMiddleware
    {
      private readonly RequestDelegate next;
    
      public MyMiddleware(RequestDelegate next)
      {
        this.next = next;
      }
    
      public async Task Invoke(HttpContext context)
      {
        this.BeginInvoke(context);
        await this.next.Invoke(context);
        this.EndInvoke(context);
      }
    
      private void BeginInvoke(HttpContext context)
      {
        // Выполняется до обработки контроллера
        // Здесь изучаем context, смотрим, что в POST запросе прилетает (если вообще прилетает)
      }
    
      private void EndInvoke(HttpContext context)
      {
        // Выполняется после отработки контроллера
      }
    }


    Чтобы использовать Middleware надо в Startup прописать:
    public class Startup
    {
      public void Configure(IApplicationBuilder app)
      {
       //    ...
        app.UseMiddleware<MyMiddleware>();
       // ...
      }
    }
  • Как разрабатывать настольные приложения с помощью html, css, js, python?

    @cicatrix
    Всеволод Захаров, JS всегда пригодится, если надумаете в веб-разработку. И, как раз, в вебе вы всегда сможете на стороне сервера вызывать питоновские скрипты, чтобы производить какие-то манипуляции, но повторяю - это будет происходить НА СЕРВЕРЕ.

    В вебе у пользователя есть только одна программа - браузер. Он заходит на страничку и смотрит, как в окошко, на ваше приложение. Ему видно только то, что вы ему показываете в виде HTML/CSS - то есть он видит картинку, не более. Если используется JS, то сам браузер сможет "в песочнице" исполнить этот код, но доступа к ресурсам машины пользователя у него нет. Соответственно, из браузера вызвать скрипт на питоне, который исполнится на машине пользователя, нельзя.
    При нажатии на кнопочку либо вы запускаете JS и пользуетесь при этом только теми данными, что имеется "в песочнице", при этом у вас никогда не будет доступа ни к памяти, ни к ОС, ни к процессам, ни к диску, ни к оборудованию, либо браузер попросту отправит на ваш сервер информацию о том, что кнопочка нажата, ну и перешлёт те данные, что пользователь в форму ввёл. И вот, получив это на сервере, вы уже можете запускать что угодно, хоть ядерные ракеты, но пользователь увидит лишь то, что вы пришлёте в ответ на POST запрос.
  • Можно ли создать в C# иерархический класс?

    @cicatrix
    Захаров Александр, Я вам же написал про ленивую инициализацию.
    Если вы работаете в команде и на вашей ответственности лишь кусочек этого проекта в виде монтрообразного класса, то разумно было бы изучить требования (если их нет - мой привет вашему системному архитектору).
    Если вы и есть архитектор, то повторяю - инициализировать надо только одно - ИД детали (объекта или что там у вас). Значения "свойств" (по сути, это данные, которые ассоциированы с этим объектом) получаются их базы непосредственно перед их использованием, а после использования (расчёта) - утилизируются. Без конкретики сложно что-то более детальное рекомендовать, но повторяю - постоянно держать в памяти целиком все данные с объектом не нужно.
  • Как разрабатывать настольные приложения с помощью html, css, js, python?

    @cicatrix
    Всеволод Захаров, Вам зачем? Если вы просто хотите делать то, что вам нравится - творите в вебе.
    Если вам, таки, впёрся именно десктоп - то рассмотрите изучение языков, которые для этого предназначены. Тут уже много адептов, топящих за своё, но рассмотрите C#.
    Во-первых, разработка для десктопа с WPF, к примеру, использует XAML, который очень близок по духу с HTML+CSS.
    C# - язык общего назначения, на нём можно писать вообще всё, что угодно (кроме, разве что, драйверов и операционных систем) и относительно прост в изучении. Так же C# является основным языком для платформы Unity, а с ней вы сможете пробовать себя уже и в разработке игр. Кроме того, с технологией ASP.Net сможете так же продолжить писать и веб-прилжоения/веб-сайты/веб-сервисы. С C# можно писать и под Windows, и под Linuх и под Android (про MacOS не в курсе, но, скорее всего, тоже можно). Ну и все ваши вкусности, которые вы видели на питоне, вполне реализуемы на С#.
    Нативно C# разумеется делался под винду, соответственно, и по дизайну (XAML) приложения, написанные на нём, выглядят получше альтернатив.

    С++ будет посложнее, думаю, сразу туда нырять в вашем случае не стоит.
    Если по каким-то причинам C# не подойдёт, рассмотрите Java.
  • Можно ли создать в C# иерархический класс?

    @cicatrix
    Захаров Александр, Я могу представить и ракетный двигатель со 100500 параметров. Вопрос чисто прикладного плана - что вы с ними делаете, с параметрами этими? Для чего программа их использует? Есть ли необходимость таскать всё это в классе, да и вообще - держать в памяти?
    Обсчёт сделать, допустим, но ведь не сразу по всем 150?
    Держим данные в базе, "ленивым" образом, то есть, по мере необходимости, подгружаем из базы только необходимые свойства. В этом случае ваш класс должен просто уметь достать нужное значение по имени свойства. Грубо говоря (псевдокодом):
    double CalcVolume()
    {
        (double length, double width, double height) = 
                 MyDataProvider.GetValuesFor(myID, new string[] {"length", "width", "height"});
       return length * width * height;
    }


    Надо отобразить - опять же, получи тот же Json (XML, что угодно) в Dictionary и скорми в какой-нибуд DataGrid
  • Что делать, если не срабатывает нажатие на кнопку?

    @cicatrix
    в web.config с маршрутизацией не баловался?
  • Как разрабатывать настольные приложения с помощью html, css, js, python?

    @cicatrix
    Всеволод Захаров, Я вас, возможно, удивлю, но клиентские приложения для упомянутых вами сервисов (Discord, Skype) для десктопов являются исполняемыми файлами (Portable executable). Для windows они имеют расширение exe и скорее всего написаны на C++.
    Они просто пользуются api своих веб-сервисов (которые могут быть реализованы на чём угодно), но сама программа скомпилирована в EXE. Собственно, ни для скайпа, ни для дискорда, ни для любого другого десктопного клиента мне ещё ни разу не приходилось устанавливать на машину Node.js и питон :)
    606d79ff09118376885980.png
  • Можно ли создать в C# иерархический класс?

    @cicatrix
    Захаров Александр,
    Мне кажется, вы неверно понимаете принцип. Не плоди сущности СВЕРХ НЕОБХОДИМОСТИ. По всей видимости, необходимость есть. Даже интересно стало, что за гигантское количество свойств такое. Скорее всего, это свидетельствует о плохой нормализации данных, да и про паттерны я уже писал. Тут и SOLID поехал, скорее всего, да и всё остальное KISS, YAGNI. Когда у объекта такое количество свойств, это верный признак, что я что-то делаю не так.
    Но если выбора нет и набор свойств не меняется со временем, всё равно, для удобства лучше использовать внутренную коллекцию Dictionary и хранить значения в ней.
    Потому что в вашем случае, это, скорее всего, не свойства, а некий набор (наборы) однотипных данных.
    Если данные абсолютно гетерогенны - то тут уже точно ошибка в подходе, неверное проектирование.
  • Как разрабатывать настольные приложения с помощью html, css, js, python?

    @cicatrix
    Всеволод Захаров, Это всё замечательно крутится в вебе (на сервере). Поскольку среда на сервере контролируется владельцем сервиса, всё работает и пр.
    Но как только вы лезете в десктоп - это значит иметь зоопарк операционных систем, конфигураций, версий браузеров, настроек безопасности, антивирусов, кривого софта и железа на машинах пользователей. Программа для десктопа в целом должна быть "вещью в себе" - самостоятельный исполняемый файл со всеми зависимостями в комплекте. Пользователь должен скачать один файл, запустить установщик и начать пользоваться программой.
    И в этой связи заставлять его настраивать целую среду, в которой ваша программа будет работать = не иметь пользователей вообще. Программа может быть замечательной, но пользователи ленивы и, скорее, предпочтут вовсе не пользоваться вашей программой, чем тратить время и что-то дополнительно скачивать и тем более - настраивать.
    Для десктопа есть C++, C#, Java. Язык программирования это прежде всего инструмент, а каждый инструмент хорош для тех задач, для которых он создан. Молотком забивают гвозди, а отвёрткой вкручивают шурупы. Молотком можно, конечно, забить саморез, но зачем?
  • Как запрашивать клавишу во время виполнения цикла (Console.ReadKey)?

    @cicatrix
    Денис Фолюш, Да, с флажком гораздо лучше. Я к тому, что выходить из программы надо там, где крутится основной цикл, а не из другого места. Нормальное (и безопасное) завершение - это когда просто исполнение доходит до конца Main. Если выбрасываться из программы в другом месте, можно что-нибудь упустить.
    Пока программа маленькая, легко всё отслеживать, но по мере роста, никогда не знаешь, что добавится и какие ресурсы надо будет корректно освобождать в конце.
    1 точка входа и 1 точка выхода - это должно быть как аксиома.
  • Как разрабатывать настольные приложения с помощью html, css, js, python?

    @cicatrix
    Igor Borisov, Ну как сказать. Вот, допустим, инструкции по установке:
    1. Скачай Node.js (ссылка)
    2. Скачай electron (ссылка)
    3. Скачай питон (уточни версию!) (ссылка)
    4. Скачай мою замечательную программу.
    Вот так вот "в лоб" без установщика и скрипта.... Впрочем, можно в один архив запихнуть. Но тогда ведь и обновлять придётся... я когда такое вижу, сразу уже ничего не хочется.
  • Как разрабатывать настольные приложения с помощью html, css, js, python?

    @cicatrix
    Igor Borisov, Я вот думаю, что должно быть это за дексктопная программа, чтобы я захотел вместе с ней всё это г на свой комп установить вдовесок :)