Streams
リモートサービスから戻ってきました( .NET Remoting
)。しかしStreams
、私たち全員が知っているように、処分される使い捨てのものもあります。
Dispose
それらを使い終わったら、クライアント側に電話をかけることができました。Stream
ただし、リモートオブジェクトからを返すときに、内部で正確に何が起こるかを知りたいです。
特に:
- すべてをに読み
byte[]
、の代わりにそれを返す方がよいStream
でしょうか? - それとも、.NET Remotingは、とにかく私のためにそれを実行していますか?
- そうでない場合、返されるのは?を返すのとどのように
Stream
異なりbyte[]
ますか?結局、.NET Remoting
とにかくデータをシリアル化する必要がありますか? - クライアント側での呼び出し
Dispose
は、まったく影響がありますか?クライアント側のオブジェクトとサーバー側のオブジェクトの間に魔法のようなつながりはありますか?裏で逆シリアル化されたらDispose()
、クライアント側に電話しても意味がないのでしょうか。
質問を少し改善したいので、ここでマイク・ビルトに答えています
さて、サーバーに話しかけるストリームは(少なくとも私にとっては)予想外です。
リモートオブジェクトを消費するには、次のようなことを行う必要があります。
public static class ServiceFactory <T>
{
public static T CreateProxy()
{
Type interfaceType = typeof(T);
string uri = ApplicationServer.ServerURL + interfaceType.FullName;
return (T)Activator.GetObject(interfaceType, uri);
}
}
したがって、あるURIで消費する特定のリモートオブジェクトに明示的に手を差し伸べています。そして、そのリモートオブジェクトのメソッドが、MarshallByRefObjectから継承するオブジェクトを返す場合、それは自動的にリモート側のオブジェクトに関連付けられることを意味しますか?わかりました。自分で作成したテストオブジェクトを使用すると、簡単に再現できるはずです。つまり、これは、クライアント側でDisposeを呼び出す必要があり、サーバー側のオブジェクトにプロキシされることも意味しますか?