Ho provato ad accedere a un servizio WCF tramite chiamata jQuery AJAX con metodo GET. Quindi, a volte l'URL è lungo con parametri.WCF GET Lunghezza limite URL Problema: Richiesta non valida - URL non valido
Quando i parametri diventano così lunghi, jQuery AJAX Call non riesce e non restituisce nulla. Quindi ho inserito un punto di interruzione e ho ritirato l'URL per testarlo. Quando provo lo stesso URL nel browser (ho provato FireFox e Chrome), restituisce quanto segue quando la lunghezza dell'URL è troppo lunga.
Bad Request - URL non valido
HTTP Error 400. L'URL richiesta non è valida.
Ho controllato anche il limite di lunghezza. Quando il numero di caratteri nell'URL (in formato codificato) supera 1011 caratteri (incluso http: //), ottengo solo l'errore.
Chiunque ha la stessa situazione e ha trovato una soluzione a questo? È una limitazione di Windows o può essere gestita da qualsiasi impostazione a livello di programmazione?
Ho provato il metodo POST, ma non so che non potrei farlo funzionare. Perché ha bisogno di alcune modifiche web.config.
EDIT
L'URL ho provato a generare l'errore
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]%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]gogle.com%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
versione non codificata di 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
i miei parametri sono impostati di JSON oggetti. Non penso che nessuno dei personaggi causi il problema, perché, se riduco solo pochi caratteri alfanumerici a meno del limite, funziona.
Sto eseguendo la mia applicazione in Visual Studio 2012 Premium in Windows 8 Professional, quindi è .NET 4.5 e IIS Express Came con esso.
ulteriori ricerche
Quando cerco di indagare ulteriormente, questo non è il limite che ho già citato, che è la lunghezza del URL completo. Ma c'è una limitazione di lunghezza in ogni parametro che è di 260 caratteri.
Quindi, non sono sicuro della lunghezza totale dell'URL, ma ogni parametro (separato da "/") ha il limite. Il problema con l'URL precedente che ho pubblicato è il parametro JSON dell'indirizzo email è lungo 261 caratteri, indicato di seguito.
[{"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"}]
Se elimino 1 carattere da questo, funziona.
È la limitazione del browser? Limitazione OS?
UPDATE: SOLUZIONE
ho trovato una soluzione che ha funzionato per me, quando ho ulteriori ricerche su questo. Sto aggiornando qui poiché potrebbe essere utile per gli altri che si imbattono in questa domanda.
Questo è un IIS Impostazione
Il problema è che, il limite di caratteri di default di ogni parametro in REST url è 260 che è definito nel Registro di sistema.
Pertanto, è necessario aggiornare il registro per aumentare questo limite di dimensioni in cui è in esecuzione IIS Server/IIS Express.
In seguito è la posizione della barca:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
E il nome del valore è UrlSegmentMaxLength
. Se non è lì, creane uno con Tipo di REG_DWORD
. E specificare un valore superiore per value data
come 1000 in esadecimale o 4096 in decimale.
Questa è un'impostazione http.sys. Ulteriori informazioni sulle impostazioni http.sys: http://support.microsoft.com/kb/820129
Assicurarsi di riavviare il server/macchina per applicare le modifiche al registro. E questo è tutto.
"UPDATE: SOLUTION" ha funzionato per me. Fimas, se sei ancora in giro, se vuoi postare quella sezione della tua domanda come risposta, lo farei felicemente. –
Sicuro amico. Sono felice di sentire che la mia soluzione ha funzionato per me. :) – Firnas
La soluzione di aggiornamento funziona. Funziona ancora con PHP 5.6 e Server 2012 R2 – FunkeDope