J'ai essayé d'accéder à un service WCF via l'appel jQuery AJAX avec la méthode GET. Ainsi, parfois l'URL est longue avec des paramètres.WCF GET Limite de longueur d'URL Problème: Demande incorrecte - URL non valide
Lorsque les paramètres deviennent trop longs, l'appel jQuery AJAX échoue et ne renvoie rien. J'ai donc mis un point d'arrêt et sorti l'URL pour tester. Lorsque j'essaie la même URL dans le navigateur (j'ai essayé FireFox et Chrome), il renvoie ce qui suit lorsque la longueur de l'URL est trop longue.
Bad Request - URL non valide
Erreur HTTP 400. L'URL de la requête est invalide.
J'ai également vérifié la limite de longueur. Lorsque le nombre de caractères dans l'URL (au format encodé) dépasse 1011 caractères (y compris http: //), seule l'erreur apparaît.
Quelqu'un a-t-il la même situation et a-t-il trouvé une solution? Est-ce Windows Limitation ou Peut-il être géré par des paramètres par programmation?
J'ai essayé la méthode POST, mais je ne sais pas que je ne pouvais pas le faire fonctionner. Parce qu'il a besoin de quelques modifications web.config.
EDIT
L'URL que j'ai testé pour générer l'erreur
http://localhost:64973/Member.svc/SaveMemberWithDetail/%7B%22ID%22%7C%222%22,%22TypeID%22%7C%222%22,%22Title%22%7C%22Mr.%22,%22FirstName%22%7C%22Firnas%22,%22MiddleName%22%7C%22%22,%22LastName%22%7C%22Aliyar%22,%22Gender%22%7C%221%22,%22DateOfBirth%22%7C%222000-01-01%22,%22Nationality%22%7C%22Sri%20Lankan%22%7D/%5B%7B%22AddressLine1%22%7C%22Changed%20Address%20Line1%22,%22AddressLine2%22%7C%22Colombo%22,%22City%22%7C%22Colombo%2010%22,%22State%22%7C%22WP%22,%22PostCode%22%7C%2201000%22,%22CountryID%22%7C%221%22,%22ID%22%7C%227%22,%22TypeID%22%7C%221%22%7D%5D/%5B%7B%22Telephone%22%7C%22015154645%22,%22TypeID%22%7C%221%22%7D%5D/%5B%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2226%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]d%22,%22ID%22%7C%2227%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2228%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2229%22,%22TypeID%22%7C%221%22%7D,%7B%22EmailAddress%22%7C%[email protected]%22,%22ID%22%7C%2229%22,%22TypeID%22%7C%221%22%7D%5D/%7B%7D/481
Version non codé d'URL:
http://localhost:64973/Member.svc/SaveMemberWithDetail/{"ID"|"2","TypeID"|"2","Title"|"Mr.","FirstName"|"Firnas","MiddleName"|"","LastName"|"Aliyar","Gender"|"1","DateOfBirth"|"2000-01-01","Nationality"|"Sri Lankan"}/[{"AddressLine1"|"Changed Address Line1","AddressLine2"|"Colombo","City"|"Colombo 10","State"|"WP","PostCode"|"01000","CountryID"|"1","ID"|"7","TypeID"|"1"}]/[{"Telephone"|"015154645","TypeID"|"1"}]/[{"EmailAddress"|"[email protected]","ID"|"26","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"27","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"28","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"}]/{}/481
Mes paramètres sont un ensemble d'objets JSON. Je ne pense pas que l'un des personnages cause le problème, parce que, si je réduis juste quelques caractères alphanumériques à moins de la limite, cela fonctionne. Je cours mon application dans Visual Studio 2012 Premium dans Windows 8 Professionnel, donc c'est .NET 4.5 et IIS Express Came avec elle.
Ressources complémentaires
Lorsque je tente d'enquêter plus loin, ce n'est pas la limitation que je l'ai déjà mentionné, qui est la longueur de l'URL complète. Mais, il y a une limite de longueur dans chaque paramètre qui est de 260 caractères. Donc, je ne suis pas sûr de la longueur totale de l'URL, mais chaque paramètre (séparé par "/") a la limite. Le problème avec l'URL ci-dessus que j'ai posté est le paramètre Adresse email JSON est de 261 caractères, donnés ci-dessous.
[{"EmailAddress"|"[email protected]","ID"|"26","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"27","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"28","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"},{"EmailAddress"|"[email protected]","ID"|"29","TypeID"|"1"}]
Si je supprime 1 caractère de cela, cela fonctionne.
Est-ce la limitation du navigateur? Limitation OS?
MISE À JOUR: SOLUTION
j'ai trouvé une solution qui a fonctionné pour moi, quand je fais des recherches plus loin sur ce point. Je suis en train de mettre à jour ici car cela pourrait être utile pour d'autres personnes qui rencontrent cette question.
C'est un IIS Réglage
Le problème est dû au fait, la limite de caractères par défaut de chaque paramètre dans REST url est 260 qui est défini dans le Registre. Par conséquent, vous devez mettre à jour le Registre pour augmenter cette limite de taille lorsque le serveur IIS/IIS Express est en cours d'exécution.
suivant est l'emplacement du Registre:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
Et le nom de la valeur est UrlSegmentMaxLength
. Si ce n'est pas le cas, créez-en un avec le type REG_DWORD
. Et spécifiez une valeur plus élevée pour value data
, par exemple 1000 en hexadécimal ou 4096 en décimal.
Il s'agit d'un paramètre http.sys. Pour en savoir plus sur les paramètres http.sys: http://support.microsoft.com/kb/820129
Assurez-vous de redémarrer le serveur/l'ordinateur pour appliquer les modifications du registre. Et c'est tout.
La « MISE À JOUR: SOLUTION » a fonctionné pour moi. Fimas, si vous êtes encore là, si vous voulez poster cette section de votre question comme réponse, je serais ravi d'y revenir. –
Bien sûr mec. Heureux d'entendre que ma solution a fonctionné pour moi. :) – Firnas
La solution de mise à jour fonctionne. Cela fonctionne toujours avec PHP 5.6 et Server 2012 R2 – FunkeDope