最近、理解するためにリモーティングについて勉強していますが、リモーティングは確かに良いものであることがわかりました。
通常、リモーティングを使用するには 3 つの方法があります。1 つは
最初の方法です。 パブリック オブジェクトの公開
パブリック オブジェクトはローカルに作成されます。2 番目のタイプ: パブリック オブジェクトのリモート作成 (SAO)。
クライアント要求におけるオブジェクト作成の 3 番目のタイプ: プライベート オブジェクトのリモート作成 (CAO)
オブジェクトは HOST 上に作成され、クライアントはサーバー上のオブジェクト ディレクトリを参照します。
これら 3 つのタイプの本質的な違いがよくわかりません。これら 3 つの方法では、リモーティングの作成方法も異なります。
最初の方法
ホスト:
ChannelServices.RegisterChannel (新しい TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal (トランス、「TestService」);クライアント:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://ホスト:1500/TestService");
第二の方法
ホスト:
ChannelServices.RegisterChannel (新しい TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService"、WellKnownObjectMode.Singleton);クライアント:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://ホスト:1500/TestService");
3番目の方法
ホスト:
ChannelServices.RegisterChannel (新しい TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));クライアント:
object[] attr = {new UrlAttribute("tcp://host:1500")};
object[] args = {"コンストラクター引数のサンプル"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
リモート呼び出し処理を可能にするオブジェクトが必要な場合、このオブジェクトは MarshalByRefObject クラスから継承する必要があります。
リモート中にファイルを転送するにはどうすればよいですか?基本的な考え方は、クライアントでクライアントのファイルを開き、Byte[] 型を変換してからホスト オブジェクトを呼び出すことです。
クライアントとホスト間で転送されるオブジェクト
【シリアライズ可能】
パブリック構造体 kAction
{
パブリック文字列ファイル名。
パブリック byte[] コンテキスト;
ファイルを開き、ストリームのバイトをコンテキストに保存します。
ストリーム fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0;
byte[] コンテンツ = 新しい byte[((int) fileStream.Length) + 1];
fileStream.Read(Content,0,Content.Length);
ホストは Kaction を読み取った後、指定されたフォルダーに保存します。
MemoryStream meoeryStream=new MemoryStream(k_Action.context);
FileStream fileStream=new FileStream(@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Close();
meoeryStream.Close();
オブジェクト内に新しいオブジェクトを定義できないことが判明しました。 HOST に送信する準備をするときに、「潜在的に危険なタイプが含まれています」というメッセージが表示されます。
【シリアライズ可能】
パブリック構造体 kAction
{
パブリック文字列ファイル名。
パブリック byte[] コンテキスト;
public FineInfo fileInfo;//ここに
};
あなたの考えを記録してください。時間があるときに整理して、次回完全な記事にしたいと思います。
cnzcのブログ