C # Как получить доступ к полю или методу публичной службы из другой службы? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть сервис, и мне нужно получить его публичное поле от другого сервиса.Код этой службы:

public class MyService : ServiceBase
{
    private readonly string strConfigXmlFileName = StartupObject.DEFAULT_CONFIG_XML;
    private StartupObject _startupObject;
    private readonly string serviceName = "My Service";

    // this field is changed into service, we need to get its actual value
    public string testString;

    public MyService()
    {
        InitializeComponent();

        _startupObject = new StartupObject(strConfigXmlFileName);
    }

    private void InitializeComponent()
    {
        // For Designer only:
        ServiceName = "MyService";
    }

    protected override void Dispose(bool disposing)
    {
        if (_service != null)
            _service.Dispose();
        _service = null;

        base.Dispose(disposing);
    }

    protected override void OnStart(string[] args)
    {
        try
        {
            _startupObject.startAll();
        }
        catch (Exception ex)
        {
            // some logging
        }
    }

    protected override void OnStop()
    {
        try
        {
            _startupObject.stopAll();
        }
        catch (Exception ex)
        {
            // some logging
        }
    }
}

Как я могу получить это поле testString из другого проекта?

Я знаю, как получить ServiceController для него и запустить его, если он не был запущен, может бытьЕсть ли способ получить ServiceBase от ServiceController?

1 Ответ

1 голос
/ 25 июня 2019

Это в основном зависит от контекста и доступных инструментов, но я постараюсь ответить на этот вопрос, основываясь на своих собственных предположениях.Под «Сервисом» здесь я предполагаю экземпляр процесса, а не экземпляр объекта.

1) Эта строка доступна только для чтения / постоянная - я бы предложила сохранить ее в небольшой базе данных или файле конфигурации, совместно используемых приложениями, и прочитать этоключ конфигурации при запуске обоих приложений.

2) Вы также можете попытаться сохранить этот параметр в общей памяти.Более подробная информация - здесь .

Виртуальная память Windows не позволит вам легко получить доступ к этой переменной из другого процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...