サーバー アプリケーションとクライアント アプリケーションの間で通信できるようにしたいと考えています。どちらのアプリケーションも C#/WPF で記述されています。インターフェイスは、両方のアプリケーションが参照する別の DLL に配置されます。
interface-dll には、次のような IDataInfo-Interface があります。
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));
Client-Applications は、次の方法でサーバーからメッセージを取得します。
Serializer<IDataInfo> serializer = new Serializer<IDataInfo>();
IDataInfo dataInfo = serializer.Deserialize(string.Join(" ", App.Args));
Serializer-Class は、Soap-Formatter を使用してシリアル化/逆シリアル化する汎用クラスです。コードは次のようになります。
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 に逆シリアル化できます。
ここで、サーバーから実行中のクライアントにメッセージを送信できるようにしたいと考えています。メソッドを使用してInterface-DLLにIClient-Interfaceを導入しましたvoid ReceiveMessage(string message);
MainWindow.xaml.cs は IClient-Interface を実装しています。
私の質問は、Process-Object しかないときに、サーバーで IClient-Object を取得する方法です。について考えましActivator.CreateInstance
たが、これを行う方法がわかりません。プロセスのハンドルで IClient を取得できると確信していますが、方法がわかりません。
何か案が?