2009-01-11 6 views
0

J'ai un service de données qui prend un tableau d'octets. J'ai alors une page Web qui tente d'envoyer un fichier à ce service de données. Si le fichier est petit (disons 50kb) alors tout fonctionne comme prévu, mais si le fichier est grand (quelque chose de plus de 100kb), je reçois un message d'erreur "BadRequest" lors de l'enregistrement du service de données.Comment augmenter la taille des données envoyées à ADO.Net Data Services?

Existe-t-il un moyen d'autoriser la transmission de données volumineuses au service de données?

EDIT (plus de détails): J'ai mis maxRequestLength plus haut et j'ai essayé le webHttpBinding pour augmenter maxReceivedMessageSize, mais cela ne semble pas aider.

+0

Où avez-vous modifié le MaxReceivedMessageSize? – cmsjr

+0

Je l'ai augmenté dans le web.config sur les côtés du client (page Web) et du serveur (services de données) – ChrisHDog

+0

Chris - Toutes les entrées sur cette question ici - http://stackoverflow.com/questions/1702717/ado-net -data-services-uploading-fichiers – MOZILLA

Répondre

5

La taille maximale de la requête qu'un service WCF peut traiter est contrôlée par la propriété MaxReceivedMessageSize sur la liaison WCF. La valeur par défaut est 65536, dépassant le code de réponse 400.

Dans le fichier web.config du site Web hébergeant le service, ajoutez le nœud suivant dans la section.

<system.serviceModel> 
<services> 
    <!-- The name of the service --> 
    <service name="NorthwindService"> 
    <!-- you can leave the address blank or specify your end point URI --> 
    <endpoint address ="YourServiceEndpoint" 
       binding="webHttpBinding" bindingConfiguration="higherMessageSize" 
    contract ="System.Data.Services.IRequestHandler"> 
    </endpoint> 
    </service> 
</services> 
<bindings> 
    <webHttpBinding> 
    <!-- configure the maxReceivedMessageSize value to suit the max size of 
     the request (in bytes) you want the service to recieve--> 
    <binding name="higherMessageSize" maxReceivedMessageSize ="MaxMessageSize"/> 
    </webHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
</system.serviceModel> 

Si hébergé sur IIS, la restriction de la taille requise ASP.Net peut également causer une grande demande à être rejetée, vous devrez définir la propriété HttpRuntimeSection.MaxRequestLength. Identifiez si WCF lève une exception sous les couvertures qui ne vous sont pas adressées au niveau HTTP. Vous pouvez configure WCF tracing on the server-side pour enregistrer les informations nécessaires à partir de la couche WCF. Une fois que vous avez configuré le suivi et que vous avez reproduit l'échec, vérifiez si le journal contient un ou les deux messages d'exception.

System.ServiceModel.ProtocolException 
"The maximum message size quota for incoming messages (65536) has been exceeded. 
To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element." 

System.Web.HttpException 
"Maximum request length exceeded." 

Si vous voyez que le journal ne contient ce message, vous pouvez être sûr que l'échec est à cause de la taille du message et appliquer ce correctif en conséquence. N'oubliez pas que votre formulaire doit utiliser la méthode "POST".

3

J'ai également essayé de modifier le fichier web.config sans résultat. J'ai toujours la même exception.

Une solution qui fonctionne pour moi éditait le fichier machine.config et ajoute les lignes suivantes dans le nœud System.ServiceModel.

<standardEndpoints> 
     <webHttpEndpoint> 
      <standardEndpoint name="" maxReceivedMessageSize="16777216" maxBufferSize="16777216" /> 
     </webHttpEndpoint> 
    </standardEndpoints> 

Je ne sais pas si c'est la bonne solution, mais cela fonctionne pour moi.

Questions connexes