J'ai rencontré ce problème apparemment commun et je n'ai pas réussi à le résoudre.
Si j'appelle mon service web WCF avec un nombre relativement faible d'éléments dans un paramètre de tableau (j'ai testé jusqu'à 50), tout va bien.
Cependant, si j'appelle le service web avec 500 éléments, j'obtiens l'erreur Bad Request.
Il est intéressant de noter que j'ai exécuté Wireshark sur le serveur et il apparaît que la demande n'atteint même pas le serveur - l'erreur 400 est générée du côté client.
L'exception est :
System.ServiceModel.ProtocolException : Le serveur distant a renvoyé une réponse inattendue : (400) Bad Request. ---> System.Net.WebException : Le serveur distant a renvoyé une erreur : (400) Bad Request.
Le site system.serviceModel
de mon fichier de configuration client :
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://serviceserver/MyService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyService"
contract="SmsSendingService.IMyService" name="WSHttpBinding_IMyService" />
</client>
</system.serviceModel>
Côté serveur, mon fichier web.config contient les éléments suivants system.serviceModel
section :
<system.serviceModel>
<services>
<service name="MyService.MyService" behaviorConfiguration="MyService.MyServiceBehaviour" >
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyService.MyServiceBinding" contract="MyService.IMyService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="MyService.MyServiceBinding">
<security mode="None"></security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyService.MyServiceBehaviour">
<!-- 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="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
J'ai regardé a assez grand numéro de réponses a cette question con aucun succès .
Quelqu'un peut-il m'aider ?
0 votes
Si le serveur n'est pas atteint, il y a peut-être un problème avec les données envoyées. Peut-être y a-t-il des caractères illégaux dans la requête ? En supposant que c'est SOAP
1 votes
Vous avez donc essayé de définir tous vos attributs "max" (par exemple, maxReceivedMessageSize...) sur un nombre très élevé ?
0 votes
Oui, c'est SOAP. Et il ne devrait pas y avoir de problème avec la requête - comme je l'ai dit, tout fonctionne bien pour un maximum de 50 éléments générés avec la même application...
0 votes
@mundeep - oui - j'ai essayé de les régler tous sur 2147483647, mais sans succès. Certaines des pages auxquelles j'ai fait référence suggéraient en fait que c'était une mauvaise chose de le faire pour tous les attributs...