Лучшая практика/идеи по вызову методов, основанных на сетевых текстовых командах? [закрыто] ⇐ C#
-
Anonymous
Лучшая практика/идеи по вызову методов, основанных на сетевых текстовых командах? [закрыто]
У меня есть проект на C#, который включает управление внешним устройством, например моторизованной сценой. У меня есть класс, который взаимодействует со сценой и предоставляет API для управления им/сообщения о его статусе.
Я хочу иметь серверную программу, которая контролирует указанный этап и может получать текстовые запросы (json) по сети и на основе содержимого запроса активировать соответствующий метод в классе устройства с предоставленными параметрами.
Все запросы являются асинхронными (т. е. клиент не блокирует/не ждет ответа), и поэтому связь осуществляется через асинхронный обмен сообщениями (RabbitMQ), а не через какую-либо структуру RPC (например, gRPC).
Мне пока удалось сделать это с помощью отражения, например:
public void MesseageReciveCallback (строка msg) { RemoteCommand cmd = json.Deserialized(msg); Введите тип устройства = _motorizedStage.GetType(); deviceType.InvokeMember(cmd.Name, BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, нулевой, _моторизованная сцена, cmd.Параметры); } но мне было интересно, есть ли лучший способ сделать это элегантным способом в вышеуказанных условиях, кроме простого использования большого старого блока переключателей, который использует параметр cmd.Name и вызывает правильный метод.
Я хотел бы отметить, что производительность не является проблемой - то есть я знаю, что отражение не является идеальным с точки зрения этого, но мы говорим об исследовательской установке, используемой немногими пользователями и обрабатывающей максимум несколько запросов в секунду.
р>
Моя главная проблема заключается в том, что текущее решение заставляет клиента отправлять все параметры в object[], что делает эту настройку более склонной к ошибкам во время выполнения, то есть если я изменил тип/порядок параметров в некоторых функции в классе MotorizedStage, клиентский код не будет автоматически предупреждать меня об этом во время компиляции.
Заранее благодарим за любые идеи.
У меня есть проект на C#, который включает управление внешним устройством, например моторизованной сценой. У меня есть класс, который взаимодействует со сценой и предоставляет API для управления им/сообщения о его статусе.
Я хочу иметь серверную программу, которая контролирует указанный этап и может получать текстовые запросы (json) по сети и на основе содержимого запроса активировать соответствующий метод в классе устройства с предоставленными параметрами.
Все запросы являются асинхронными (т. е. клиент не блокирует/не ждет ответа), и поэтому связь осуществляется через асинхронный обмен сообщениями (RabbitMQ), а не через какую-либо структуру RPC (например, gRPC).
Мне пока удалось сделать это с помощью отражения, например:
public void MesseageReciveCallback (строка msg) { RemoteCommand cmd = json.Deserialized(msg); Введите тип устройства = _motorizedStage.GetType(); deviceType.InvokeMember(cmd.Name, BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, нулевой, _моторизованная сцена, cmd.Параметры); } но мне было интересно, есть ли лучший способ сделать это элегантным способом в вышеуказанных условиях, кроме простого использования большого старого блока переключателей, который использует параметр cmd.Name и вызывает правильный метод.
Я хотел бы отметить, что производительность не является проблемой - то есть я знаю, что отражение не является идеальным с точки зрения этого, но мы говорим об исследовательской установке, используемой немногими пользователями и обрабатывающей максимум несколько запросов в секунду.
р>
Моя главная проблема заключается в том, что текущее решение заставляет клиента отправлять все параметры в object[], что делает эту настройку более склонной к ошибкам во время выполнения, то есть если я изменил тип/порядок параметров в некоторых функции в классе MotorizedStage, клиентский код не будет автоматически предупреждать меня об этом во время компиляции.
Заранее благодарим за любые идеи.
Мобильная версия