2010-12-12 3 views
2

J'ai un point de terminaison webHttp WCF et remarqué aujourd'hui que lorsqu'il est appelé HttpGet avec une longue url ~ 364 caractères au total (http: // etc pris en compte) IIS renvoie une erreur 400 mauvaise demande. Lancer un point d'arrêt dans le code n'est jamais atteint. Si je supprime certains paramètres et que j'ai une URL 354, le service Web s'exécute comme prévu.WCF URL Longueur Causer IIS 400 Bad Request Erreur

Je ne suis pas sûr où la question est depuis urls peut être comme 2k. Je ne poste aucune donnée donc je ne pense pas que je suis en train de toucher une limite de 4 Mo comme de here

Ce qui donne?

Voici quelques trucs xml WCF.

<behaviors> 
     <endpointBehaviors> 
      <behavior name="REST"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 

<endpoint address="" behaviorConfiguration="REST" binding="customBinding" bindingConfiguration="jsonpBinding" contract="Interface"/> 


<bindings> 
     <customBinding> 
      <binding name="jsonpBinding"> 
       <jsonpMessageEncoding/> 
       <httpTransport manualAddressing="true"/> 
      </binding> 
     </customBinding> 
    </bindings> 
    <extensions> 
     <bindingElementExtensions> 
      <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
     </bindingElementExtensions> 
    </extensions> 

Je viens enlevé le nom de la fonction de rappel qui a considérablement réduit la taille de l'url et encore jeté une erreur 400. Cela me fait penser qu'il ya une limite de taille WCF sur le texte qui peut être envoyé en tant que paramètre de chaîne.

ici, de quelques trucs du contrat

[OperationContract] 
[WebGet(UriTemplate = @"{userName}/layer({layerName})returnAttributes({attributeList})where({attributeName})({op})({attributeValue})", ResponseFormat = WebMessageFormat.Json)] 
[JSONPBehavior(callback = "callback")] 
DojoGrouping GetAttributes(string userName, string layerName, string attributeList, string attributeName, string attributeValue); 

la question est avec AttributeList qui peut être séparés par des virgules.

donc avec un appel url comme

http://../demo/layer(OfficialsLookup)returnAttributes(USHOUSE,US_Photo,US_Web,US_Name,SENDIST,SEN_Name,SEN_Email,SEN_Party,SEN_Photo,REPDIST,REP_Name,REP_Email,REP_Party,REP_Web,REP_Photo)utmX(430)utmY(4502)

il bustes. Mais si je raccourcis le texte d'attribut de retour, alors il fonctionne correctement. J'ai redémarré la machine après l'avoir ajoutée et je reçois toujours la même erreur. Est-ce le bon endroit pour modifier les paramètres HTTP.sys que WCF et IIS utilisent? Existe-t-il un moyen de tester que WCF est affecté par cette valeur de Registre?

est ici un poste lié sans réponse, mais en disant que les choses de httpsys n'a pas fixé un serveur 64 bits qui est ce que nous utilisons.

Related Post

Répondre

3

Pour résoudre notre problème nous avons dû utiliser le .NET Framework 4.0. Nous avons déplacé le service Web pour qu'il s'exécute sous un pool d'applications .net 4.0 et a modifié le framework cible en version 4.0. Cela a causé le site à cracher url est une erreur trop longue au lieu de simplement une mauvaise demande. Après avoir ajouté une entrée de configuration Web dans

<system.web> 

ajouté

<httpRuntime maxUrlLength="500" /> 

pour la longueur url max, le service est opérationnel comme prévu.

+0

Ancien message mais récemment rencontré ce problème. Ce qui précède semble fonctionner uniquement de manière fiable pour IIS7. Sur IIS6 la seule solution qui a fonctionné était le paramètre de registre comme référencé ci-dessus dans l'autre réponse [KB820129] (http://support.microsoft.com/kb/820129) – EdSF

1

WCF utilise HTTP.sys pour gérer le trafic HTTP. HTTP.sys a des paramètres système pour gérer diverses restrictions autour de l'URL. Vous pourriez en frapper un.

Voir l'article suivant pour savoir ces paramètres: http://support.microsoft.com/kb/820129

Vous devez redémarrer le service HTTP et votre service WCF. Si elle est hébergée dans IIS, redémarrez IIS. UrlSegmentMaxLength semble être intéressant pour votre modèle d'URI.

+0

Ouais je parie que c'est la longueur maximale du segment d'url. Je vais y jeter un coup d'oeil demain et je te laisse savoir. Je – Steve

+0

ajouté l'entrée suivante dans le Registre: Nom de la clé: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters Nom de la classe: Dernière écriture Heure: 1/25/2011 - 15:34 Valeur 0 Nom: UrlSegmentMaxLength Type: REG_DWORD Données: 0x200 J'ai redémarré la machine après l'avoir ajoutée et je reçois toujours la même erreur. Est-ce le bon endroit pour modifier les paramètres HTTP.sys? Existe-t-il un moyen de tester que WCF est affecté par cette valeur de Registre? – Steve

Questions connexes