GET 메서드로 jQuery AJAX 호출을 통해 WCF 서비스에 액세스하려고했습니다. 따라서 URL이 매개 변수와 함께 길 경우가 있습니다.WCF URL 길이 제한 문제 : 잘못된 요청 - 잘못된 URL
매개 변수가 너무 길어지면 jQuery AJAX 호출이 실패하고 아무 것도 반환하지 않습니다. 그래서 나는 중단 점을 넣고 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가 포함되어 있습니다.
또한 연구
I 조사하기를 시도, 이것은 전체 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 문자를 삭제하면 작동합니다.
브라우저 제한 사항입니까? OS 제한 사항?
UPDATE : 솔루션
은 내가 이것에 더 연구 할 때, 나를 위해 일한 해결책을 발견. 나는이 질문을 우연히 본 다른 사람들에게 유용 할 수 있기 때문에 여기에서 업데이트 할 예정입니다.
이것은
REST URL에 포함 된 각 매개 변수의 기본 문자 제한은 레지스트리에 정의되어 260, 때문에 문제는 설정는 IIS입니다.
IIS 서버/IIS Express가 실행되는이 크기 제한을 늘리려면 레지스트리를 업데이트해야합니다. 다음
는레지스트리의 위치입니다 :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
그리고 값 이름은 UrlSegmentMaxLength
입니다. 그곳에 없으면, 유형이 REG_DWORD
인 것을 작성하십시오. 그리고 value data
에 대해 더 높은 값을 지정하십시오 (예 : 1000은 16 진수, 4096은 10 진수).
http.sys 설정입니다. http.sys 설정에 대한 추가 정보 : http://support.microsoft.com/kb/820129
레지스트리 변경 사항을 적용하려면 서버/시스템을 다시 시작하십시오. 그게 전부입니다. 당신은 데이터의 저장을 가능하면 POST를 사용하려면 GET을 사용해서는 안
1) :
"업데이트 : 해결책"이 효과적입니다. Fimas, 만약 당신이 아직도 주위에, 당신이 대답으로 질문의 해당 섹션을 게시하려면, 나는 행복하게 그것을 upvote 줄. –
물론입니다. 다행히도 내 솔루션이 저에게 효과적이었습니다. :) – Firnas
업데이트 솔루션이 작동합니다. 이것은 PHP 5.6 및 Server 2012 R2와 함께 계속 작동합니다. – FunkeDope