Stream.Length löst NotSupportedException aus
Bin ich immer eine Fehlermeldung beim Versuch stream.Länge auf einem Stream-Objekt geschickt in meinem WCF-Methode.
Unhandled Exception!
Error ID: 0
Error Code: Unknown
Is Warning: False
Type: System.NotSupportedException
Stack: at System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream.get_Length()
Wie kommst du auf die Länge der stream??? Beispiele dafür?
InformationsquelleAutor der Frage Nevin Mathai | 2010-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stream.Länge funktioniert nur auf Stream-Implementierungen, wo die Suche ist verfügbar. Sie können in der Regel überprüfen, um zu sehen, ob Stream.CanSeek wahr ist. Viele streams, da sind Sie gestreamtsind von einer Natur, wo es unmöglich ist, zu wissen, die Länge im Voraus.
Wenn Sie müssen wissen, die Länge, die Sie benötigen können, um tatsächlich buffer den gesamten Strom, das laden in den Speicher im Voraus.
InformationsquelleAutor der Antwort Reed Copsey
Begegnete ich das gleiche problem bei der Verwendung von WCF-services. Ich brauchte, um den Inhalt einer Nachricht POSTEN, und wurde mit einem Strom-argument in meiner Methode, um den Inhalt der Nachricht Körper. Sobald ich den stream, ich wollte um den Inhalt zu Lesen, alle auf einmal, und erforderlich zu wissen, welche Größe byte-array, die ich brauchen würde. Also, bei der Zuweisung der Arrays, ich würde Ruf-System.IO.Stream.Länge und erhalten die Ausnahme erwähnt, die von der OP. Ist der Grund, warum Sie brauchen, zu wissen, die Länge des Streams, so dass Sie können Lesen Sie den Inhalt der gesamten Strom?
Sie können tatsächlich Lesen Sie den gesamten Inhalt des Streams in einen string mit System.IO.StreamReader. Wenn Sie noch nicht wissen, die Größe deines Streams, können Sie die Länge des resultierenden Strings. Hier ist der code, wie ich dieses problem gelöst:
InformationsquelleAutor der Antwort froggythefrog
Du kannst nicht immer bekommen die Länge eines Streams. Im Fall von einer Netzwerk-stream, der einzige Weg, um herauszufinden, die Länge ist zum Lesen von Daten aus, bis es geschlossen ist, zum Beispiel.
Was wollen Sie tun? Könnten Sie aus dem stream gelesen, bis es erschöpft ist, kopieren Sie die Daten in eine
MemoryStream
wie Sie gehen?InformationsquelleAutor der Antwort Jon Skeet
Ist es nicht immer möglich, um die Länge eines Baches, wenn es nicht Unterstützung suchen. Finden Sie in der exception-Tabelle auf der Klasse Stream.
Beispielsweise ein Strom angeschlossen, um einen anderen Prozess (Netzwerk-stream, standard-Ausgabe, etc) produzieren kann jeder output-Menge, je nachdem, wie die anderen Prozess geschrieben wird, und es gibt keine Möglichkeit, das framework um herauszufinden, wie viel Daten es gibt.
Im Allgemeinen Fall, den Sie gerade gelesen haben, in der alle Daten, bis das Ende des Streams und dann herauszufinden, wie viel Sie gelesen haben.
InformationsquelleAutor der Antwort dsolimano
Dies ist, was ich Tue:
InformationsquelleAutor der Antwort Paul Bartlett
TcpClient.EndRead() zurückgeben sollte, die Anzahl der bytes in den stream.
--Edit, natürlich, müssen Sie einen TCP-Stream
InformationsquelleAutor der Antwort