Narażenie wewnętrznych aplikacji za pomocą WCF

Próbuję postawić pierwsze kroki w IPC i WCF, i jak dotąd spadam płasko na twarz. Mam aplikację Winforms, którą chciałbym w pewnym stopniu wykorzystać do zdalnego dzwonienia. Aplikacja WinForm ma większość swojej logiki biznesowej ograniczonej do singletonu, który zajmuje się wszystkimi pracami w tle. Chciałbym udostępnić niektóre funkcje za pośrednictwem mechanizmu IPC. WCF wygląda na drogę do przodu, więc zacząłem od tego.

Próbowałem dodać projekt biblioteki usług WCF do mojego rozwiązania, dzięki któremu chciałbym ujawnić niektóre połączenia. Kiedy uruchamiam projekt Winforms w debuggerze VS, działa on normalnie i uruchamia się WcfSvcHost. Mogę komunikować się z usługą WCF za pomocą WcfTestClient.

Jednak gdy próbuję uzyskać dostęp do singletonu zawierającego kod, z którym chciałbym się komunikować, wygląda na to, że otrzymuję nowy obiekt singleton. Oczywiście robię to źle; Myślę, że dzieje się tak, że usługa działa w innym procesie, więc nie ma prawdziwego współdzielonego kodu, a zatem nie ma współdzielonego singletonu.

Nie jestem pewien, jak powinienem kontynuować. Czy mój wybór użycia WCF dla IPC jest niewłaściwy? Czy należy zintegrować punkty końcowe WCF w aplikacji Winforms? Czy to, co próbuję, jest nawet możliwe?

EDIT: Pomyślałem, że jest to tak wysoki poziom, a także tak prosty, że każda próbka kodu byłaby bezużyteczna. Myślę, że się myliłem. Więc jakiś kod:

W zespole WinForm:

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;
    }
  }
}

W zespole WCFServiceLibrary:

[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();
  }
}

kiedy pytamSingletonInited za pośrednictwem WcfTestClient otrzymuję InitedAt, który nie jest tym samym DateTime, co zainicjowanie singletonu winforms.

Edit2:

Ten kod działa tak jak jest (z automatycznie generowanym rusztowaniem wokół rzeczy Winforms). Etykieta na formularzu wyświetla inny czas niż czas zwrócony z wywołania WCF, demonstrując, że jest to inna instancja.

questionAnswers(2)

yourAnswerToTheQuestion