Was passiert unter der Abdeckung, wenn Sie einen Stream von einem Remote-Objekt über .NET Remoting zurückgeben

8

Ich gebe Streams von einem Remote-Dienst ( .NET Remoting ) zurück. Aber wir sind auch Einwegartikel, die, wie wir alle wissen, entsorgt werden müssen.

Ich könnte Streams auf der Client-Seite aufrufen, sobald ich diese verbraucht habe. Allerdings würde ich gerne wissen, was genau unter der Abdeckung passiert, wenn ich eine Dispose von einem Remote-Objekt zurückgeben.

Besonders:

  1. Soll ich besser alles in ein Stream einlesen und das anstelle von byte[] ?
  2. zurückgeben?
  3. Oder macht .NET Remoting genau das für mich unter den Deckeln?
  4. Wenn nicht, wie wird ein Stream anders als ein Stream zurückgegeben? Am Ende muss byte[] irgendwie die Daten irgendwie serialisieren?
  5. Hat der Aufruf von .NET Remoting auf der Client-Seite überhaupt irgendwelche Auswirkungen? Gibt es eine magische Verbindung zwischen dem Objekt auf der Clientseite und dem Objekt auf der Serverseite? Ich denke, sobald es hinter den Covern deserialisiert ist, hat es keinen Sinn, Dispose auf der Clientseite aufzurufen oder gibt es das?

Ich antworte hier Mike Bild, weil ich die Frage auch etwas verbessern möchte

Ok, der Stream, der zurück zum Server spricht, ist (zumindest für mich) unerwartet.

Um ein entferntes Objekt zu berechnen, muss man so etwas machen:

%Vor%

Sie greifen also explizit auf ein bestimmtes entferntes Objekt in einem URI zu, das konsumiert werden soll. Und wenn eine Methode für dieses Remote-Objekt ein Objekt zurückgibt, das von MarshallByRefObject erbt, was bedeutet, dass es automatisch dem Objekt auf der Remote-Seite zugeordnet wird? Ok, das sollte mit einem Testobjekt, das ich selbst gebaut habe, einfach zu reproduzieren sein. Das bedeutet also auch, dass ich Dispose auf der Clientseite aufrufen sollte und es auf das Objekt auf der Serverseite zurückgeführt wird?

    
Christoph 17.10.2012, 14:32
quelle

1 Antwort

2

Ein Stream ist ein MarshalByRefObject. Das ist eine besondere Art. Es ist ein Proxy.

  1. Sie können mit beiden in .NET remoting
  2. arbeiten
  3. Nein, es ist ein anderer Typ über einen generierten Proxy - suchen Sie nach Vererbung von MarshalByRefObject
  4. Ссылка
  5. Ja, ein wenig Magie über die Proxy-Klasse
Mike Bild 17.10.2012, 18:27
quelle