HTTP 400 Bad Request Error avec WCF Service lorsque la taille du message dépasse 64 KO
J'ai un .NET 4.0 service WCF. Si j'envoie un message soap supérieure à 64 ko, puis-je obtenir "Le serveur distant a renvoyé une réponse inattendue: (400) Bad Request" Erreur. Il fonctionne très bien tout le chemin jusqu'à ce que je dépasse les 64 KO de taille de message. J'ai lu les nombreux posts qui circulent sur quoi faire pour cette erreur, et aussi loin que je peux dire, j'ai le bon web.config valeurs, mais j'ai toujours l'erreur. Voici les paramètres de mon site web.config. Rien de ce que je suis absent? Cela se produit lors de la communication à la fois à mon local ASP.NET VS et un serveur distant Windows 2008 R2 serveur IIS. Est-il un moyen de vérifier ou de journal de la maxReceivedMessageSize paramètres, etc. qui sont dans la liaison de service en temps réel ou dans le débogueur? Le service est hébergé dans MVC si cela fait une différence.
<httpRuntime maxRequestLength="50000000" />
...
...
<bindings>
<basicHttpBinding>
<binding name="IpsApiBinding" receiveTimeout="00:15:00" sendTimeout="00:05:00" maxReceivedMessageSize="40000000">
<readerQuotas maxDepth="5000000" maxStringContentLength="50000000"
maxArrayLength="50000000" maxBytesPerRead="50000000" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ApiBehavior" name="IPSApi.IpsApi">
<endpoint behaviorConfiguration="endpointBehavior" binding="basicHttpBinding"
bindingConfiguration="IpsApiBinding" name="IPSApi.IpsApi"
contract="IPSApi.IIPSApi" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="endpointBehavior">
<dataContractSerializer maxItemsInObjectGraph="6553600" />
<callbackDebug includeExceptionDetailInFaults="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ApiBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
Sur le côté client, la pile de la piste est de montrer...
Serveur de trace de pile: à
Système.ServiceModel.Les canaux.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest
demande, HttpWebResponse réponse, HttpChannelFactory usine,
WebException responseException, ChannelBinding channelBinding) à
Système.ServiceModel.Les canaux.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan
délai d'attente)
Système.ServiceModel.Les canaux.RequestChannel.Demande(Message,
Plage de temps (timeout) à
Système.ServiceModel.Répartiteur.RequestChannelBinder.Demande(Message
message, plage de Temps (timeout) à
Système.ServiceModel.Les canaux.ServiceChannel.Appelez le(la Chaîne de l'action,
Boolean oneway, ProxyOperationRuntime opération, Object[] ins,
Object[] sorties, la plage de Temps (timeout) à
Système.ServiceModel.Les canaux.ServiceChannel.Appelez le(la Chaîne de l'action,
Boolean oneway, ProxyOperationRuntime opération, Object[] ins,
Object[] out) à
Système.ServiceModel.Les canaux.ServiceChannelProxy.InvokeService(IMethodCallMessage
appel de méthode, ProxyOperationRuntime opération) à
Système.ServiceModel.Les canaux.ServiceChannelProxy.Invoke(IMessage
message) Exception renvoyé à [0]:
Système.Moment de l'exécution.L'accès distant.Les procurations.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg) ...
aucune erreur ne se produit sur le côté serveur - pas de journaux d'événements, et aucune exception
Avez-vous essayé tous les réglages ici?
Lester, oui, je pense que j'ai tous ces paramètres. Curieux, sont le max.. les valeurs de la taille requise sur le côté client? Ce sont vraiment que d'un côté serveur, correct? J'ai ajouté pour le côté client, n'a toujours pas de faire une différence. Vous vous demandez encore si. thx
OriginalL'auteur Ron | 2011-12-23
Vous devez vous connecter pour publier un commentaire.
J'ai compris mon problème. Voici les détails. Je suis l'hébergement de mon service WCF dans une application MVC. Le service WCF est dans une DLL. J'ai eu les paramètres de configuration dans le web.config en pensant qu'il serait lire sa configuration à partir de là. Venir pour savoir, si dans une DLL, il ne sera pas utiliser le web.paramètres de configuration. Il était juste en utilisant les liaisons par défaut, etc.
Pour le faire lire à la configuration web.config, j'ai utilisé la méthode qui a été suggéré dans http://blogs.msdn.com/b/dotnetinterop/archive/2008/09/22/custom-service-config-file-for-a-wcf-service-hosted-in-iis.aspx . J'ai créé ma propre ServiceHostFactory et ServiceHost. Dans le ServiceHostFactory.CreateServiceHost-je créer une instance de ma ServiceHost (classe dérivée). Dans mon ServiceHost classe dérivée, je prends des cours de la ApplyConfiguration et charger la configuration à partir du web.config.
Ça marche!!!
OriginalL'auteur Ron
J'ai eu un problème similaire et a également eu d'augmentation de deux champs supplémentaires dans la liaison que je ne vois pas dans ton code... maxBufferSize et maxBufferPoolSize. Pas si sûr que ce serait votre question, mais je sais que la valeur par défaut pour ces est d'environ 64 ko.
Des Exemples Sur Le Web.paramètres de configuration:
J'ai essayé l'option de traçage et il a dit j'ai besoin de régler le maxReceivedMessageSize. Je l'ai réglé à une valeur très élevée dans le web.config. Après des recherches à l'aide de la OperationContext, j'ai pu voir mes liaisons pour le service web et les avis qu'ils étaient tous aux valeurs par défaut. Fondamentalement, ma liaisons dans le web.config sont ignorés. Je pense que je peut savoir ce qui se passe. J'ajoute mes services à mon MVC table de routage à l'aide de la méthode décrite ici, stackoverflow.com/questions/4047485/... .
suite... je pense que l'utilisation de cette méthode que sur le web.config paramètres sont ignorés. Je suis accéder au service web à l'aide de la mvc route, pas l' .svc fichier. En fait, je n'ai même pas un .svc fichier.
OriginalL'auteur Borophyll
Je dirais pour activer le suivi de votre Service afin de déterminer la cause exacte de la Bad Request. Si c'est à cause de la taille de message le cadre de vous dire clairement sur quelle propriété doit être définie. Pour activer le traçage de suivre ce lien
OriginalL'auteur Rajesh