I have 2 c# applications which communicate with each other through netPipe WCF. One application is sending to the other application an array of bytes. If I check the receiving application's memory map using a process memory viewer (like CheatEngine), I can read the received byte array as a string. Why is this happening?
1 に答える
答えは非常に簡単です。配列は当然参照型です。なぜですか? それぞれが特定の値を持つ多くの異なるメモリ位置を指している間、メモリ内に単一の値を持つことはできないためです。そのため、参照型にする必要があります。そのため、オブジェクト (配列) をあるコンピューターから別のコンピューターに直接渡すことはできません。その後、どうなりますか?オブジェクトに関連付けられたすべての値は、メモリからフェッチする必要があり、受信者が受信したときに元の形式に変換できるように「シリアル化」する必要があります。これをデシリアライゼーションと呼びます。オブジェクトを XML や JSON に変換するなど、データのシリアル化と逆シリアル化にはさまざまな方法があります。代わりに、バイト配列の通信を意味する、あなたが行っていることと非常によく似たバイナリ シリアル化を実行します。
さらに詳しく説明するには、以下のモデルを想像してください。
public class MyModel{
public string Name{get; set;}
public string Email{get; set;}
}
通信したい場合:
MyModel Model = new MyModel{ Name ="Jack", Email = "Gmail"};
このオブジェクトは次のように変換されます。
<MyModel>
<Name>Jack</Name>
<Email>Gmail</Email>
</MyModel>
通過できるように、受信すると元の形にキャストバックされます。ただし、MyModel
クラスは両側で使用できるようにする必要があるため、再利用できるようにこれらの型を dll ファイルに保持することをお勧めします。詳細を知りたい場合は、詳細を追加するようお知らせください。