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の変更が必要なためです。
EDIT
私は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 for 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文字削除すると動作します。
ブラウザの制限はありますか? OSの制限?
UPDATE:SOLUTION
私はこの上でさらに研究するとき、私は、私のために働いた解決策を見つけました。この質問に遭遇した他の人にとっては役に立ちそうなので、ここで更新しています。
これは、RESTのURLの各パラメータのデフォルトの文字制限は、レジストリで定義されている260で、ため、問題がある
を設定するIISです。
IISサーバー/ IIS Expressが実行されているこのサイズ制限を増やすには、レジストリを更新する必要があります。続き
は、レジストリの場所である:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
そして値の名前はUrlSegmentMaxLength
です。存在しない場合は、タイプがREG_DWORD
のものを作成します。 value data
には、16進数で1000、小数点で4096などの高い値を指定します。
これはhttp.sysの設定です。 http.sys設定の詳細:http://support.microsoft.com/kb/820129
サーバー/マシンを再起動して、レジストリの変更を適用してください。 それだけです。
"UPDATE:SOLUTION"が私のために機能しました。 Fimas、あなたがまだ周りにいる場合は、あなたの質問のセクションを回答として投稿したい場合、私はうれしくupvoteしたい。 –
確かです。私の解決策が私のために働いたことを聞いてうれしい。 :) – Firnas
アップデートソリューションが動作します。これはまだPHP 5.6およびServer 2012 R2で動作しています – FunkeDope