J'essaie d'extraire une grande quantité de données d'un service Web WCF. La demande est assez petite et le message de réponse sera très grand. Actuellement, le service Web lance des exceptions SystemOutOfMemory en raison d'une limitation sur IIS6 pour la mémoire allouée (~ 1,4 Go).Meilleures pratiques pour la réponse en continu du service Web WCF
J'ai lu dans certains blogs que l'implémentation du streaming résoudrait mon problème.
Quelqu'un peut-il partager ses expériences sur ce sujet? Je suis particulièrement intéressé par tout exemple de code côté service & côté client pouvant être partagé ou toute recommandation/meilleure pratique. MemoryStream vs FileStream? Le type de retour doit être Stream, Message, Byte []?
Mon opération se présente comme suit: (En général, il retournera un grand nombre d'éléments dans le tableau de réponse, ~ éléments 200K)
MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)
Voir également http://msdn.microsoft.com/en-us/library/ms789010.aspx pour des exemples qui se trouvent en bas de la page associée à marc. – Xiaofu
Thansk Mark, je suis en quelque sorte familier avec les bases de la mise en œuvre de streaming. Je sais qu'il y a différentes façons de l'implémenter, certains développeurs utiliseront un message comme type de retour par opposition à une classe Stream. Certains utiliseront un FileStream alors que d'autres un MemoryStream. J'essaie de recueillir des commentaires, contre un avantage sur les différentes implémentations pour le streaming en WCF. – Damian
@Damian: ok, excellent. Bien, je n'ai pas eu beaucoup d'expérience de première main avec le streaming en WCF moi-même, mais je dirais: utiliser n'importe quel flux a du sens. Ça doit être un cours d'eau, un cours d'eau, un cours d'eau - mais quel type est largement hors de propos. Si vous avez déjà des fichiers sur le serveur, utilisez FileStream. Si vous devez charger un blob à partir d'une table de base de données, utilisez un MemoryStream. Je ne suis pas au courant de problèmes majeurs liés à l'utilisation d'un type de flux par rapport à un autre. Mais peut-être que quelqu'un d'autre peut nous éclairer un peu plus! –