Dio non ami semplicemente WCF.WCF Dannata richiesta BAD 400 a causa di maxReceivedMessageSize rimanendo 65536
Ho letto tutte le possibili discussioni ma ora sono davvero bloccato.
Ecco configurazione WCF:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BaseHttp"
maxBufferSize="4194304"
maxBufferPoolSize="4194304"
maxReceivedMessageSize="4194304" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TaskServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TaskServiceBehavior" name="TaskService">
<endpoint
address="http://www.mysite.com/TableTaskService/TableTaskService.svc"
binding="basicHttpBinding" bindingConfiguration="BaseHttp"
contract="TableTaskService.ITableTaskService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://www.mysite.com/TableTaskService/" />
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.mysite.com/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
Ora mando un messaggio e avere gettato questa eccezione di default (sega nel file di svclog):
La quota massima dimensione del messaggio per i messaggi in arrivo (65536) è stato superato . Per aumentare la quota, utilizzare la proprietà MaxReceivedMessageSize sull'elemento di collegamento appropriato.
Ora dichiaro chiaramente che dovrebbe essere 4mb.
Il mio codice cliente:
TableTaskServiceClient client =
new TableTaskServiceClient(
new BasicHttpBinding { MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304 },
new EndpointAddress(GetEndpointAddressString())
);
Eppure getta questo errore 65536 dimensioni di me. Da dove proviene ?? ..
Inoltre è importante che il client configuri lo MaxReceivedMessageSize
sullo stesso valore del server? Penso che sarebbe logico che il server fosse responsabile della determinazione della lunghezza, non del client.
C'è anche questo avviso (notare quanto è utile in quello che dice, cioè: nessuna informazione sull'elemento che viene sovrascritto o mi manca qualcosa), forse basichttpbinding è esattamente ciò che viene sovrascritto? ma perché dovrebbe essere? comunque:
[TraceRecord] severity WARNING TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx Descrizione Il sistema di configurazione ha rilevato una chiave duplicata in un diverso ambito di configurazione ed è override con la recente valore più . AppDomain/LM/W3SVC/11/root/TableTaskService-33-1.296.567 Fonte System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851.144.413 comportamento ElementName OldElementLineNumber 0 NewElementLineNumber 0
UPDTE: riconfigurato sia il servizio e cliente:
TableTaskServiceClient client = new TableTaskServiceClient(
new BasicHttpBinding {
MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304,
MaxBufferPoolSize=4194304,
ReaderQuotas = new XmlDictionaryReaderQuotas
{
MaxArrayLength = 4194304,
MaxBytesPerRead = 4194304,
MaxDepth = 4194304,
MaxNameTableCharCount = 4194304,
MaxStringContentLength = 4194304
}
}, new EndpointAddress(GetEndpointAddressString()));
Stesso errore.
Se questo è di un certo interesse vi mando un array di byte [] di 467000 ~ lunghezza
Stesso errore. Ho confermato un paio di volte che questa configurazione è utilizzata nella configurazione del servizio (modificata in BaseHttp1, errore visto, modificato, il servizio funziona bene nel browser), ma è sempre lo stesso. Credo che dovrebbe funzionare ... ma semplicemente non funziona. –
Stai configurando sia il servizio che il client? Perché scommetto che c'è anche un limite sul lato client. –
sì riconfigurato entrambi i posti. –