Доступ к самостоятельно размещенной службе WCF из программы Host WinForms

Я создал приложение Windows Forms для запуска службы WCF, которая будет использоваться практически полностью одной частью программного обеспечения, работающего на том же компьютере, и я также хотел бы, чтобы приложение хостинга служило «панелью мониторинга», которая будет отображать соответствующие обновления статуса о поступающих запросах для обеспечения прозрачности. Однако, хотя приложение Windows Forms используется для запуска и остановки службы, мне не удалось заставить его взаимодействовать с ним каким-либо другим значимым образом.

Некоторые примечания/что я пробовал:

  • Доступ к сервису будет иметь только одна программа (возможно, кроме программы хостинга)
  • Служба настроена на использование InstanceContextMode.Single, но свойство SingletonInstance объекта ServiceHost всегда имеет значение null.
  • Добавление ссылки на службу к собственной размещенной службе привело к тому, что основная программа перестала отвечать на запросы (возможно, не неожиданно).

Прошу прощения за неточность, но я в основном попытался получить доступ к объекту службы, а затем к самой службе. Я что-то упустил или есть совершенно лучший способ сделать это?

Спасибо,

ГББ

Изменить: для ясности/решения, с которым я столкнулся, - установка ссылки на окно хоста как статического члена класса окна хоста, который был доступен службе.

public partial class frmMainWindow : Form
{
    public static frmMainWindow CurrentInstance;
    ServiceHost serviceHost;        

    public frmMainWindow ()
    {
        InitializeComponent();
        CurrentInstance = this;            
    }

    void StartService()
    {
        // service host stuff here for starting TestServer service
    }

    void StopService()
    {
        // stop the service
    }

    // update the status textbox in the host form
    public void SetStatus(string status)
    {
        textStatus.Text = status;
    }



[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class TestServer : ITestServer
{
    frmMainWindow HostWindow = null;

    public TestServer ()
    {
        HostWindow = frmMainWindow .CurrentInstance;
        HostWindow.SetStatus("Service started");
    }

person GBB    schedule 31.07.2018    source источник
comment
В целом это не такой уж плохой вопрос, но без вашего кода и конфигурации его почти невозможно решить. Я бы посоветовал вам следовать некоторым руководствам по самостоятельному хостингу с нуля и, по крайней мере, получить что-то работающее, с чем вы можете поиграть. или, если вы выберете, обновите этот вопрос со всем соответствующим кодом и настройками для клиента и хоста. однако я бы действительно предложил вариант A. поскольку он слишком широк и невозможно понять, что вы сделали неправильно или пропустили   -  person TheGeneral    schedule 31.07.2018
comment
Достаточно справедливо - я добавил больше к исходному вопросу, включая решение, которое я нашел на основе связанной ссылки (которую, конечно, я не смог найти, прежде чем задать вопрос).   -  person GBB    schedule 03.08.2018


Ответы (1)


Решение, изложенное в отредактированном исходном сообщении, - установить ссылку на окно хоста как на статический член класса окна хоста.

person GBB    schedule 03.08.2018