Im utilisant WCF pour envoyer toutes sortes de messages et ce message en perticular est d'environ 3200000 octets plus certaines chaînes et en-têtes. Le grand paylode est un objet sérialisé récupéré à partir de l'hôte via un autre service dont j'ai essayé d'imiter la configuration sous tous les aspects. J'utilise la liaison netTcp pour les performances et nous utilisons beaucoup de rappels. J'ai placé toutes les options que je peux trouver au niveau maximum sur le côté de client et de serveur.Impossible d'envoyer des messages volumineux par-dessus WCF
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IEventMissionService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="None" />
</binding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:7359/EventMissionMap" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IEventMissionService" contract="RXEventMissionMapService.IEventMissionService" name="NetTcpBinding_IEventMissionService" />
</client>
</system.serviceModel>
Je reçois ce non-descript message d'erreur sur le client:
La connexion socket a été interrompue. Cela peut être dû à une erreur lors du traitement de votre message ou à un dépassement de délai de dépassé par l'hôte distant ou à un problème réseau sous-jacent . Le délai d'attente du socket local était '00: 00: 59,9979996'.
Et exteption interne:
Une connexion existante a été fermée force par l'hôte distant
trace de course amène un peu plus d'informations (haut de la trace de la pile):
System.ServiceModel.Channels.SocketConnection.Write (Octet []tampon, Int32 offset, taille Int32, temporisation immédiate booléenne, TimeSpan) Haut de la trace de pile exteption interne: System.Net.Sockets.Socket.Send (byte [] tampons, Int32 offset, taille Int32, SocketFlags SocketFlags)
Haut de la trace de pile exception interne:
System.Net.Sockets.Socket.Send (byte [] buffer , Int32 offset, taille Int32, SocketFlags SocketFlags)
Si je définis la charge utile sur null (sans envoyer l'objet de 3,2 Mo), le message passe sans problème. Le fait que l'objet provient d'un autre service a-t-il quelque chose à voir avec mon problème?
À mes yeux, le problème est la taille du message, mais l'augmentation des options dans la configuration ne m'a pas aidé jusqu'à présent.
J'ai essayé de mettre sur le client sans succès. L'utilisation du streaming entraîne le passage à la demande/la réponse ou la suppression de tous les rappels ...
Des idées?
1) Publiez votre maxReceivedMessageSize et readerQuota 2) Comment fonctionne la charge utile? Byte Array? – Aliostad
1) Où va la valeur maxReceivedMessageSize? le lecteur queotas est déjà posté !? 2) La charge utile est un octet [] –
Essayez d'augmenter le délai d'envoi. – DarrellNorton