C#: HttpClient, Le serveur a commis une violation de protocole. Section=ResponseStatusLine
Je suis en utilisant le HttpClient classe de communiquer à un service web dans mon application WPF.
Quand je fais consécutives des demandes sur la même connexion, tout fonctionne bien. Cependant, quand je fais consécutives METTRE/demandes de correctifs sur la même connexion, la première requête s'exécute avec précision et je reçois une réponse, mais la deuxième demande n'inclut pas le corps dans la demande et je reçois l'erreur infâme de "Le serveur a commis une violation de protocole. Section=ResponseStatusLine".
Mes demandes ne terminent avec succès si je fermer manuellement la connexion après chaque demande par l'ajout de Connection: close de l'en-tête. Cette "solution" est un mauvais modèle et de la performance ne sera pas adaptée.
Ci-dessous est un debranded version de la liste de mes Flux TCP de Sortie de demandes envoyées:
Wireshark: Suivre le Flux TCP de Sortie
GET /domain/api/tenant/current/object?objectName=Lizbot HTTP/1.1
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 50
{"Data":[{"Id":123,"ObjectName":"Lizbot","Date":null}],"Errors":[]}
PATCH /domain/api/tenant/current/object/123 HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 50
{"Id":123,"ObjectName":"Lizbot","Date":null}
HTTP/1.1 204 No Content
Content-Type: application/json; charset=utf-8
{"Data":null,"Errors":[]}
PATCH /domain/api/tenant/current/object/123/otherObject HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
HTTP/1.1 400 Bad Request</b>
Content-Type: text/html; charset=us-ascii
Connection: close
Content-Length: 311
Avis que le deuxième PATCH est manquante à l'objet qu'il est censé patch avec. Si je change l'ordre de l'application des Correctifs, le second PATCH qui manque encore à son objet.
Cette erreur semble être commun avec les quelques solutions que j'ai essayé. Ils se composent de cette solution qui implique la définition de la useUnsafeHeaderParsing propriété de TRUE et le réglage de la Keep-Alive propriété de FALSE dans le Web.Config. J'ai aussi essayé la solution de la définition de ces propriétés de cette manière indiquée ci-dessous:
ServicePointManager.DefaultConnectionLimit = 2;
ServicePointManager.Expect100Continue = false;
Aucune de ces solutions n'a fonctionné. Il convient de noter que lors de l'utilisation de la Http outil de proxy de Débogage, Violoniste, pour capturer ces demandes, je ne reçois pas toutes les erreurs.
Alors ce que je demande, c'est si quelqu'un connaît une bonne solution pour diminuer cette erreur donc je peux faire des demandes multiples dans une connexion sans perdre le corps d'une mise à jour. Si plus de détails sont nécessaires, je suis heureux de les fournir.
OriginalL'auteur Liz Miner | 2013-08-28
Vous devez vous connecter pour publier un commentaire.
Le problème sous-jacent est que le PATCH réponse est contenu dans le corps de la réponse. S'assurer que le serveur n'envoie pas de contenu lors de l'envoi d'un 204 Aucun Contenu.
Même si je suis d'accord que l'envoi de 204 avec un corps est une violation de protocole, HttpClient de gérer cette situation avec sans aucun problème. Comme auto-hébergé api web. Peut-être IIS gâcher les choses.
OriginalL'auteur Daniel
Après beaucoup de débogage et de la lecture, j'ai réalisé que j'étais en train d'éditer le Web.Fichier de configuration de l'application WPF au lieu de l'application.fichier de config!
Donc, si vous déposez ce code dans le app.config fichier à la racine de la balise configuration pour une application WPF, il résout le problème.
OriginalL'auteur Liz Miner