Interna einer Winforms-Anwendung über WCF verfügbar machen

Ich versuche meine ersten Schritte in die IPC und die WCF zu machen, und bis jetzt falle ich flach auf mein Gesicht. Ich habe eine Winforms-Anwendung, die ich für Remote-Anrufer etwas instrumentieren möchte. Bei der winforms-Anwendung beschränkt sich der größte Teil der Geschäftslogik auf einen Singleton, der die gesamte Hintergrundarbeit erledigt. Ich möchte einige der Funktionen über einen IPC-Mechanismus offenlegen. WCF scheint der richtige Weg zu sein, also habe ich damit begonnen.

Ich habe versucht, meiner Lösung ein WCF-Dienstbibliotheksprojekt hinzuzufügen, über das ich einige Aufrufe verfügbar machen möchte. Wenn ich das Winforms-Projekt im VS-Debugger starte, wird es wie gewohnt ausgeführt und der WcfSvcHost wird gestartet. Ich kann mit dem WcfTestClient mit dem WCF-Dienst kommunizieren.

Wenn ich jedoch versuche, auf den Singleton zuzugreifen, der den Code enthält, mit dem ich kommunizieren möchte, erhalte ich anscheinend ein neues Singleton-Objekt. Klar, ich mache es falsch; Was ich denke, passiert, ist, dass der Dienst in einem anderen Prozess ausgeführt wird, es gibt also keinen echten gemeinsam genutzten Code und daher keinen gemeinsam genutzten Singleton.

Ich bin mir nicht sicher, wie ich weitermachen soll. Ist meine Wahl, WCF für IPC zu verwenden, die falsche? Soll ich die WCF-Endpunkte in die Winforms-Anwendung integrieren? Ist das, was ich versuche, überhaupt machbar?

EDIT: Ich dachte, das wäre so hoch und auch so einfach, dass jedes Codebeispiel nutzlos wäre. Ich glaube ich habe mich geirrt. Also ein bisschen Code:

In der WinForms-Assembly:

public partial class Form1 : Form
{
  public Form1()
    {
      InitializeComponent();
      label1.Text = MySingleton.Instance.InitedAt.ToString();
    }
}

public class MySingleton
{
  private static MySingleton instance = new MySingleton();
  private DateTime inited;

  private MySingleton()
  {
    this.inited = DateTime.Now;
  }

  public static MySingleton Instance
  {
    get
    {
      return instance;
    }
  }

  public DateTime InitedAt
  {
    get
    {
      return this.inited;
    }
  }
}

In der WCFServiceLibrary-Assembly:

[ServiceContract]
public interface IApplicationProbe {

  [OperationContract]
  string DoesItWork();

  [OperationContract]
  string SingletonInited();
}

public class ApplicationProbe : IApplicationProbe {
  public string DoesItWork(){
    return "Why yes, yes it does";
  }

  public string SingletonInited(){
    return MySingleton.Instance.InitedAt.ToString();
  }
}

wenn ich frageSingletonInited Durch den WcfTestClient erhalte ich ein InitedAt, das nicht mit DateTime der Instanz des Winforms-Singleton übereinstimmt.

Edit2:

Ich habe diesen Code ausgeführt, wie er ist (mit dem automatisch generierten Gerüst um das Winforms-Zeug). Die Beschriftung im Formular zeigt eine andere Uhrzeit als die vom WCF-Aufruf zurückgegebene an, um zu demonstrieren, dass es sich um eine andere Instanz handelt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage