我試圖通過使用GET方法的jQuery AJAX調用訪問WCF服務。所以,有時候這個URL很長,帶有參數。WCF GET 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
非編碼版本的網址:
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對象。我認爲任何角色都不會導致問題,因爲如果我只是將少數字母數字字符減少到小於極限值,就會起作用。
我在Windows 8 Professional的Visual Studio 2012 Premium中運行我的應用程序,所以它的.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個字符,它就會起作用。
是瀏覽器限制嗎?操作系統限制?
UPDATE:解決方案
我發現這工作對我來說,當我進一步研究了一個解決方案。我在這裏更新,因爲它可能對遇到此問題的其他人有用。
這是一個IIS設置
的問題是,因爲在REST URL每個參數的缺省字符限制爲260,其在註冊表中定義。
所以,你必須更新註冊表,以增加在IIS服務器/ 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
確保,重新啓動服務器/計算機應用註冊表更改。 就是這樣。
「更新:解決方案」爲我工作。 Fimas,如果你還在身邊,如果你想把你的問題的那一部分作爲答案發布,我會很高興地提出這個問題。 – 2015-09-05 02:03:08
當然是老兄。很高興聽到我的解決方案爲我工作。 :) – Firnas 2015-09-08 12:08:01
更新解決方案的作品。這仍然與PHP 5.6和服務器2012 R2 – FunkeDope 2015-12-11 18:39:37