Service WCF erreur 400 bad request
J'ai été la recherche de ce problème, et j'ai trouvé des problèmes similaires affiché par d'autres utilisateurs, mais tout ce que j'ai essayé ne fonctionne pas, Le problème est que je suis en utilisant un service WCF hébergé sur IIS, et un client que d'essayer de télécharger une image sérialisée sur une chaîne de caractères, la taille de l'image est de 9 mo environ, everythin le reste fonctionne très bien, je peux envoyer des données sans problème à l'exception de l'image.
J'ai activé tracelog et le message d'erreur dit que le MaxReceivedMessageSize dépasser
Voici ma config sur le service:
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true" >
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="myUserTraceSource"
switchValue="Information, ActivityTracing, All">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<trace autoflush="true" />
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="ErrorSvcLog.svclog" />
</sharedListeners>
</system.diagnostics>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IServicioSalud" closeTimeout="10:01:00"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" openTimeout="10:01:00"
receiveTimeout="10:10:00" sendTimeout="10:01:00"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="ServicioSalud">
<endpoint address="" binding="basicHttpBinding" contract="IServicioSalud" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="200000" />
</behavior>
</serviceBehaviors>
</behaviors>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>
</configuration>
Et la configuration du client
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IServicioSalud" closeTimeout="10:01:00"
openTimeout="10:01:00" receiveTimeout="10:10:00" sendTimeout="10:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true"
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://xxx.xxx.x.xxx:xxxx/wcfservicesalud/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServicioSalud"
contract="IServicioSalud" name="BasicHttpBinding_IServicioSalud" />
</client>
</system.serviceModel>
Vous devez définir le point de terminaison de service à la configuration de liaison que vous avez définies (BasicHttpBinding_IServicioSalud) via le
bindingConfiguration
attribut.OriginalL'auteur MaxJRB | 2013-04-19
Vous devez vous connecter pour publier un commentaire.
Dans votre fichier de configuration, vous n'avez pas affecté à la liaison de configuration que vous avez créé, de sorte que les valeurs par défaut pour
BasicHttpBinding
sont utilisés. Vous devez affecter explicitement la liaison que vous avez définies (BasicHttpBinding_IServicioSalud) de votre point de terminaison, comme ceci:Faire pour votre service de config, que le service doit être configuré pour accepter plus de données.
Vous êtes les bienvenus. Content d'avoir pu aider.
OriginalL'auteur Tim
C'est ma version. Assurez-vous que vous avez la bindingConfiguration spécifié dans le service que vous souhaitez. Dans mon cas, j'ai pour spécifier le nom basicHttpBinding.
OriginalL'auteur Michele Ferracin
Pour moi, la cause était le fait que dans ma demande, je n'avais pas défini le type de contenu.
OriginalL'auteur Cosmin