146 messaggi dal 05 maggio 2005
Ciao a tutti!
Ho sviluppato un Wcf che deve eseguire l'upload di file della dimensione di media 100 KB.

Se il file è più piccolo di 16 KB il tutto funziona bene,ma se supera la dimensione allora ottento il seguente errore:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize
parameter http://tempuri.org/:Buffer.
The InnerException message was 'There was an error deserializing the object of type WcfWS.mapDocument.
The maximum array length quota (16384) has been exceeded while reading XML data.
This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader.
Line 1, position 49238.'.

mapDocument è un array di byte.

Nel web.config del Wcf ho impostato questo:


<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="13107200" maxBufferPoolSize="524288" maxReceivedMessageSize="13107200"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="13107200"
maxBytesPerRead="4096" maxNameTableCharCount="13107200" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://srv-archiflow/SSWS/default.asmx"
binding="basicHttpBinding" bindingConfiguration="ServiceSoap"
contract="SvWS.ServiceSoap" name="ServiceSoap" />
</client>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

ma sembra essere ingnorato.
Dall'applicativo WcfTest vedo in file di config che contiene sempre questo valore:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IServiceArchiflow" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/ServiceAF.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServiceAF"
contract="IServiceAF" name="BasicHttpBinding_IServiceAF" />
</client>
</system.serviceModel>
</configuration>

Come faccio a fare in modo di poter gestire la dimensione del file di cuoi devo fare l'upload?

Grazie
Occhio che le quota valgono sia per il client sia per il server. Vedendo che dà un errore di deserializzazione mi viene da pensare al server e infatti nel config che hai postato c'è solo il client

Ciao

Il mio blog
Homepage
146 messaggi dal 05 maggio 2005
Mi sono creato una caso di prova.
In localhost ho creato un WCF con un metodo che non fa assolutamente nulla se non ritornarmi ok e che ha come parametro un array di byte:

Public Function InsertDocument(Buffer() As Byte) As String Implements IService1.InsertDocument

return "ok"
end function

poi sempre in localhost ho creato una Web Application che fa riferimento a questo WCF a cuoi passo l'array di byte dal controllo FileUpload:

Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Dim ws As New WCFTest.Service1Client

ws.InsertDocument(FileUpload1.FileBytes)
End Sub

Il web.config ha questo settaggio:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Mtom" transferMode="Streamed" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:24883/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="WCFTest.IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>

Ache in questo caso continuo a ricevere il messaggio dei 16384...

Ma come posso fare per poter passare un file ad un WCF?

Grazie,
Atropo

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.