Je suis en train d'écrire un petit WCF, WPF/app pour redimensionner des images, mais WCF est de me donner le chagrin quand j'essaye d'envoyer une image de taille 28K à mon service auprès du client. Le service fonctionne très bien lorsque je envoyer des images plus petites. J'ai immédiatement cru que c'était un problème de configuration et j'ai parcouraient le web à la recherche à des postes concernant la MaxArrayLength bien dans ma configuration de liaison. Ive fait monter les limites de ces paramètres sur le client et le serveur au maximum de 2 147 483 647, mais encore j'obtiens l'erreur suivante:
Le formateur a déclenché une exception, tout en essayant de désérialiser le message: Il y a eu une erreur lors de la tentative de désérialiser paramètre http://mywebsite.com/services/servicecontracts/2009/01:OriginalImage. Le InnerException message était " Il y a une erreur de la désérialisation d'un objet de type System.De dessin.Image. La longueur maximale de la matrice de quota (16384) a été dépassé lors de la lecture de données XML. Ce quota peut être augmenté par la modification de la MaxArrayLength bien sur la XmlDictionaryReaderQuotas objet utilisé lors de la création du lecteur XML.'. Veuillez voir InnerException pour plus de détails.
J'ai fait mon client et le serveur configs les mêmes et elles ressemblent à ce qui suit: Serveur:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_ImageResizerServiceContract" 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="2147483647"
maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="LogoResizer.WCF.ServiceTypes.ImageResizerService" behaviorConfiguration="ServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:900/mex/"/>
<add baseAddress="net.tcp://localhost:9000/" />
</baseAddresses>
</host>
<endpoint binding="netTcpBinding" contract="LogoResizer.WCF.ServiceContracts.IImageResizerService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
et mon client config ressemble:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_ImageResizerServiceContract" 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="2147483647"
maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:9000/" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_ImageResizerServiceContract"
contract="ImageResizerService.ImageResizerServiceContract"
name="NetTcpBinding_ImageResizerServiceContract">
<identity>
<userPrincipalName value="me@domain.com" />
</identity>
</endpoint>
</client>
</system.serviceModel>
Il semble peu importe ce que j'ai mis ces valeurs, je reçois toujours un message d'erreur indiquant wcf ne peut sérialiser mon dossier parce que son supérieur à 16384. Des idées?
Mise à jour: l'adresse e-mail dans le userPrincipalName tag a été modifié pour la protection de ma vie privée