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