Я попытался получить доступ к службе WCF через jQuery AJAX-вызов с помощью метода GET. Поэтому иногда URL-адрес длинный с параметрами.
Когда параметры становятся настолько длинными, jQuery AJAX Call терпит неудачу и ничего не возвращает. Поэтому я поставил точку останова и проверил URL-адрес, чтобы проверить. Когда я пытаюсь использовать тот же URL-адрес в браузере (я попробовал FireFox и Chrome), он возвращает следующее, когда длина URL слишком длинная.
Плохой запрос - неверный URL
Ошибка HTTP 400. Недопустимый URL-адрес запроса.
Я также проверил ограничение длины. Когда число символов в URL (в кодированном формате) превышает 1011 символов (включая http://), я получаю ошибку.
У кого-то такая же ситуация и найдено какое-либо решение? Это ограничение по Windows или может ли оно управляться с помощью любых настроек программно?
Я пробовал метод POST, но я не знаю, что я не мог заставить его работать. Потому что ему нужны некоторые изменения в web.config.
ИЗМЕНИТЬ
URL-адрес, который я тестировал для генерации ошибки
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]%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
Некодированная версия 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
Мои параметры заданы объектами Json. Я не думаю, что любой из символов вызывает проблему, потому что, если я просто уменьшу количество буквенных символов до предела, это будет работать.
Я запускаю свое приложение в Visual Studio 2012 Premium в Windows 8 Professional, поэтому он использовал .NET 4.5 и IIS Express.
Дальнейшие исследования
Когда я пытаюсь исследовать это дальше, это не ограничение, о котором я уже говорил, это длина полного URL-адреса. Но в каждом параметре есть ограничение длины, которое составляет 260 символов.
Итак, я не уверен в общей длине URL, но каждый параметр (разделенный на "/" ) имеет ограничение. Проблема с указанным выше URL-адресом, который я опубликовал, - это адрес электронной почты. Параметр JSON имеет длину 261 символ, указанный ниже.
[{"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"}]
Если я удалю 1 символ из этого, он будет работать.
Ограничено ли это браузером? Ограничение ОС?
ОБНОВЛЕНИЕ: РЕШЕНИЕ
Я нашел решение, которое работало для меня, когда я еще больше изучаю это. Я обновляюсь здесь, так как это может быть полезно для других, которые сталкиваются с этим вопросом.
Это настройка IIS
Проблема заключается в том, что ограничение по умолчанию для каждого параметра в URL REST составляет 260, которое определено в реестре.
Итак, вам нужно обновить реестр, чтобы увеличить ограничение размера, в котором работает IIS Server/IIS Express.
Ниже приведено расположение реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
И имя значения UrlSegmentMaxLength
. Если его нет, создайте его с типом REG_DWORD
. И укажите более высокое значение для value data
, например 1000 в шестнадцатеричном или 4096 в десятичной форме.
Это настройка http.sys. Подробнее о настройках http.sys: http://support.microsoft.com/kb/820129
Убедитесь, что вы перезагрузите сервер/машину, чтобы применить изменения реестра. И что это.