Разоблачение внутренностей приложения winforms через WCF
Я пытаюсь сделать свои первые шаги в IPC и WCF, и до сих пор я падаю лицом вниз. У меня есть приложение Winforms, которое я хотел бы использовать для удаленных абонентов. Приложение winforms имеет большую часть своей бизнес-логики, ограниченной одноэлементным, который заботится обо всей фоновой работе. Я хотел бы раскрыть некоторые функции через механизм IPC. WCF выглядит как путь вперед, поэтому я начал с этого.
Я попытался добавить проект WCF Service Library в свое решение, с помощью которого я хотел бы представить некоторые вызовы. Когда я запускаю проект Winforms в отладчике VS, он работает как обычно, и запускается WcfSvcHost. Я могу общаться с сервисом WCF с помощью WcfTestClient.
Однако, когда я пытаюсь получить доступ к одноэлементному коду, содержащему код, с которым я хотел бы общаться, мне кажется, что я получаю новый одноэлементный объект. Очевидно, я делаю это неправильно; Я предполагаю, что служба работает в другом процессе, поэтому нет реального общего кода и, следовательно, нет общего синглтона.
Я не уверен, как мне продолжать. Является ли мой выбор использования WCF для IPC неправильным? Должен ли я интегрировать конечные точки WCF в приложение Winforms? То, что я пытаюсь сделать, даже осуществимо?
РЕДАКТИРОВАТЬ: Я полагал, что это было настолько высокого уровня, а также настолько просто, что любой пример кода будет бесполезным. Я думаю, что я был неправ. Итак, некоторый код:
В сборке WinForms:
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;
}
}
}
В сборке 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();
}
}
когда я запрашиваюSingletonInited
через WcfTestClient я получаю InitedAt, который не совпадает с DateTime, как синглтон winforms.
Edit2:
У меня этот код работает как есть (с автоматически сгенерированными скаффолдингами вокруг Winforms). Метка в форме отображает время, отличное от времени, возвращенного вызовом WCF, демонстрируя, что это другой экземпляр.