Pergunta

Estou vendo um problema em que envio mensagens grandes sobre o WCF net.msmq usando o Protobuf-Net e recebo o seguinte erro:

O formatador abriu uma exceção ao tentar desserializar a mensagem: Erro ao desaperando o corpo da mensagem de solicitação para a operação 'Deliverdata'. Elemento final 'proto' do espaço para nome 'http: // mynamespace' esperado

Se o tamanho da mensagem estiver abaixo de 16k, funciona

Se eu remover o protobuf-net, ele funciona

Se eu mudar para Basichttp, funciona

Mas se o tamanho da mensagem for superior a 16k, usando o protobuf-net, em net.msmq, recebo o erro. Eu defini MaxBufferPoolSize e MaxReceivedMessagesize o suficientemente grande, isso não ajuda.

alguém mais viu isso? Alguém mais usou o protobuf-net + net.msmq para mensagens grandes e fez com que funcione?

Foi útil?

Solução

Desculpas pelo atraso - férias etc. Não, não vi um problema específico com isso. O fato de chamar o "elemento final" sugere que está na camada XML na época (que é antes do protobuf-net verdade se envolve). Você tem alguma maneira de reproduzir isso de maneira confiável?


Após a investigação, o problema aqui parece ser o leitor-Quotas do WCF; A exceção parece ser engolida pelo MSMQ, por isso não foi imediatamente óbvio. Isso pode ser consertado na configuração, ou em código (se você estiver configurando suas ligações manualmente), referenciando o sistema.Runtime.Serialization e aumentando a ligação da ligação .ReaderQuotas.MaxArrayLength adequadamente. O valor máximo permitido é 2147483647.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top