Я хочу иметь возможность связываться между серверным приложением и клиентским приложением. Оба приложения написаны на C#/WPF. Интерфейсы расположены в отдельной DLL, где оба приложения имеют ссылку на нее.Отправить сообщение другому процессу
В интерфейсной-DLL является IDataInfo-интерфейс, который выглядит следующим образом:
public interface IDataInfo
{
byte[] Header { get; }
byte[] Data { get; }
}
Сервер-приложений вызывает клиент следующим кодом:
Serializer<IDataInfo> serializer = new Serializer<IDataInfo>();
IDataInfo dataInfo = new DataInfo(HEADERBYTES, CONTENTBYTES);
Process clientProcess = Process.Start("Client.exe", serializer.Serialize(dataInfo));
Клиентские-Applications Получает сообщение с сервера:
Serializer<IDataInfo> serializer = new Serializer<IDataInfo>();
IDataInfo dataInfo = serializer.Deserialize(string.Join(" ", App.Args));
Сериализатор-класс - это всего лишь универсальный класс whi ch использует мыло-форматирование для сериализации/десериала. Код выглядит так:
public class Serializer<T>
{
private static readonly Encoding encoding = Encoding.Unicode;
public string Serialize(T value)
{
string result;
using (MemoryStream memoryStream = new MemoryStream())
{
SoapFormatter soapFormatter = new SoapFormatter();
soapFormatter.Serialize(memoryStream, value);
result = encoding.GetString(memoryStream.ToArray());
memoryStream.Flush();
}
return result;
}
public T Deserialize(string soap)
{
T result;
using (MemoryStream memoryStream = new MemoryStream(encoding.GetBytes(soap)))
{
SoapFormatter soapFormatter = new SoapFormatter();
result = (T)soapFormatter.Deserialize(memoryStream);
}
return result;
}
}
До сих пор здесь все работает нормально. Сервер создает клиента, и клиент может десериализовать его аргумент в IDataInfo
-Object.
Теперь я хочу иметь возможность отправлять сообщение с сервера на работающего клиента. I Введен интерфейс IClient в интерфейсе DLL со способом void ReceiveMessage(string message);
MainWindow.xaml.cs реализует интерфейс IClient.
Вопрос: Как я могу получить объект IClient-Object на моем сервере, когда у меня есть только Process-Object. Я думал о Activator.CreateInstance
, но я понятия не имею, как это сделать. Я уверен, что могу получить IClient с помощью Handle of Process, но я не знаю, как это сделать.
Есть идеи?
Вам нужно использовать какую-то схему связи. Читайте в WCF. –