Je retourne un flux à partir d'un service WCF et essaye de le convertir en MemoryStream. Mais dans l'application web où je consomme le service WCF, j'obtiens le résultat de "MessageBodyStream" où je m'attendais "System.IO .Courant". Comment puis-je convertir cela en MemoryStream?C# Comment convertir MessageBodyStream en MemoryStream?
Répondre
Message.BodyStream
est de type Stream
. Vous aurez besoin de lire le flux complet dans votre MemoryStream
afin de le convertir.
Je ne sais pas si c'est ce que vous voulez réellement, mais vous pouvez simplement affecter la valeur à une variable MemoryStream
, singe MemoryStream
hérite de Stream
.
Parfois, les cours d'eau viennent et vous ne savez pas comment ils sont gros, pour que l'utilisation de ce code:
public static byte[] ReadToEnd(System.IO.Stream stream)
{
long originalPosition = stream.Position;
byte[] readBuffer = new byte[4096];
int totalBytesRead = 0;
int bytesRead;
while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
{
totalBytesRead += bytesRead;
if (totalBytesRead == readBuffer.Length)
{
int nextByte = stream.ReadByte();
if (nextByte != -1)
{
byte[] temp = new byte[readBuffer.Length * 2];
Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
readBuffer = temp;
totalBytesRead++;
}
}
}
byte[] buffer = readBuffer;
if (readBuffer.Length != totalBytesRead)
{
buffer = new byte[totalBytesRead];
Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
}
return buffer;
}
Ensuite, une fois que vous avez le tableau d'octets vous pouvez convertir en un flux de mémoire ...
byte[] myBytes = ReadToEnd(theStream);
Stream theMemStream = new MemoryStream(myBytes, 0, myBytes.Length);
pour convertir MessageBodyStream à un MemoryStream, procédez comme suit:
MemoryStream stream = new MemoryStream();
messageStream.CopyTo(stream); // Assuming messageStream is your MessageBodyStream
stream.Position = 0; // Be sure to set the position to 0 before using it.
Et vous avez terminé !!
Espérons que cela aide.
On dirait que le tampon dans l'exemple de code va doubler de taille chaque fois qu'il est allongé dans la boucle interne. Ainsi, au lieu de
byte[] temp = new byte[readBuffer.Length * 2]
ne serait-il pas préférable d'ajouter au lieu de multiplier, par ex. Idéalement, nous pourrions utiliser ici une variable au lieu d'une valeur codée en dur, mais j'espère que cela illustre bien le problème.
- 1. Comment vérifier si MemoryStream peut convertir en Bitmap dans .NET?
- 2. MemoryStream "mémoire insuffisante" C#
- 3. Analog MemoryStream en Python
- 4. Lecture d'un immense MemoryStream en C#
- 5. Convertir MemoryStream en FileStream crée des centaines de fichiers identiques?
- 6. Comment convertir en utilisant C#?
- 7. Comment convertir le code C# en C++
- 8. Comment faire pour convertir vidéo en byte Array en C# (c sharp)?
- 9. comment convertir décimal en binaire en C++
- 10. Comment convertir 1234.5678 en 1234.56 en C#?
- 11. comment convertir bitmap en intptr en C#
- 12. Comment convertir AVI en 3gp en C#?
- 13. Convertir MP3 en WAV dans Memorystream pour la lecture avec System.Media.Soundplayer
- 14. "Chunked" MemoryStream
- 15. memorystream - stringstream, string, autres?
- 16. BinaryFormatter avec MemoryStream Question
- 17. Comment implémenter string (xml) en memorystream pour le fichier en C#?
- 18. Convertir un extrait de C# en vbscript
- 19. convertir C++ en vb6
- 20. Convertir VB en C#
- 21. comment convertir hexadécimal de chaîne en C#
- 22. Comment convertir le code c en matlab
- 23. Comment convertir chaîne à LPWSTR en C++
- 24. C#: Comment convertir long en ulong
- 25. Comment convertir html à BBcode en C#
- 26. Comment convertir une chaîne en OctetString (C#)?
- 27. C#: Comment convertir .pptx en images?
- 28. Comment convertir l'heure de l'époque en C#?
- 29. Comment convertir les TryCast en C#?
- 30. Comment convertir un paramètre générique en C#?