Tout le monde voit ce problème avec protobuf net sur net.msmq
-
26-09-2019 - |
Question
Je vois un problème où j'envoie des messages volumineux sur net.msmq WCF en utilisant protobuf-net et obtenir l'erreur suivante:
Le formatter a lancé une exception tout en essayant de désérialiser le message: Erreur dans désérialisation corps du message de demande pour l'opération « DeliverData ». élément final 'proto' de namespace ' http: // mynamespace ' attendu
Si la taille du message est sous 16k, il fonctionne
Si je supprime protobuf-net, cela fonctionne
Si je passe à basichttp, cela fonctionne
Mais si la taille du message est sur 16k, en utilisant protobuf-net, sur net.msmq, je reçois l'erreur. J'ai mis maxBufferPoolSize et maxReceivedMessageSize suffisamment grand, il ne l'aide.
Quelqu'un a vu d'autre cela? Est-ce que quelqu'un d'autre utilisé + net.msmq protobuf net pour les grands messages et obtenu à travailler?
La solution
Toutes mes excuses pour le retard - vacances etc. Non, je n'ai pas vu un problème spécifique avec cela. Le fait qu'il appelle le « élément final » suggère qu'il est dans la couche xml au moment (ce qui est avant protobuf net vraiment se implique). Avez-vous une façon que je puisse reproduire de manière fiable cela?
Après enquête, le problème apparaît ici comme lecteur-quotas d'un FCZ; l'exception semble être avalé par MSMQ, n'a donc pas été immédiatement évidente. Cela peut être corrigé en configuration , ou dans le code (si vous configurez vos fixations manuellement) en faisant référence à System.Runtime.Serialization et en augmentant la .ReaderQuotas.MaxArrayLength
de liaison appropriée. La valeur maximale autorisée est 2147483647
.