WebRequest schlägt mit "414 Request-URI too long" in ASP.NET Anwendung
Haben wir eine ASP.NET Anwendung, die Anfragen, die eine SSRS 2005-Bericht im HTML-format nach dem passieren der Parameter für den Bericht als einen WebRequest. Die Anwendung nur dann fehl, wenn ein Bericht mit einer großen Anzahl von multi-select-Parameter angefordert wird, werfen Sie eine "414: Request-URI too long" Fehler bei der webRequest.GetResponse()
Linie.
Den code verwendet, um die Anfrage ist:
HttpWebRequest webRequest = null;
HttpWebResponse webResponse = null;
string webRequestURL = _ReportManager.GetRSUrl(reportID); //this passes the report link on the SSRS server
//make the request
Byte[] bytes = Encoding.UTF8.GetBytes("xml_doc=" + HttpUtility.UrlEncode(webRequestURL));
webRequest = (HttpWebRequest)WebRequest.Create(webRequestURL);
webRequest.Method = "POST";
webRequest.ContentLength = bytes.Length;
webRequest.Timeout = Configuration.WebRequestTimeOut;
RSExecution2005.ReportExecutionService rsE = new RSExecution2005.ReportExecutionService();
rsE.Url = Configuration.ReportExecutionServiceUrl2005;
rsE.Credentials = System.Net.CredentialCache.DefaultCredentials;
webRequest.Credentials = rsE.Credentials;
Stream reqStream = null;
reqStream = webRequest.GetRequestStream();
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Close();
webResponse = (HttpWebResponse)webRequest.GetResponse();
Als der Bericht nicht auf der server-Seite, ich habe mir in IIS und ReportServer-Eigenschaften zu erhöhen, die maxUrl, maxRequestLength, MaxQueryString etc. in Bezug auf bytes (pro dieser Artikel), aber die Anwendung immer noch ein Fehler ausgegeben. Ich habe versucht, diese im web.config-Dateien und direkt auf dem IIS-manager.
Den reporting-server-version 2005 und es ist gehostet auf Windows Server 2008 mit IIS 7.
David Lively ' s beraten ich habe versucht, die Beantragung der URI, indem Sie die Parameter in den Körper. Dies funktioniert für kleinere Anfragen, aber noch immer nicht für große multi-Parameter auswählen. Der geänderte code ist wie folgt:
HttpWebRequest webRequest = null;
HttpWebResponse webResponse = null;
string webRequestURL = _ReportManager.GetRSUrl(reportID); //this passes the report link on the SSRS server
string postData = string.Empty;
string URIrequest = string.Empty;
URIrequest = webRequestURL.Substring(0, webRequestURL.IndexOf("&"));
int requestLen = webRequestURL.Length;
int postDataStart = webRequestURL.IndexOf("&") + 1;
postData = webRequestURL.Substring(postDataStart, (requestLen - postDataStart));
Byte[] bytes1 = Encoding.UTF8.GetBytes(postData);
webRequest = (HttpWebRequest)WebRequest.Create(URIrequest);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = bytes1.Length;
webRequest.Timeout = Configuration.WebRequestTimeOut;
RSExecution2005.ReportExecutionService rsE = new RSExecution2005.ReportExecutionService();
rsE.Url = Configuration.ReportExecutionServiceUrl2005;
rsE.Credentials = System.Net.CredentialCache.DefaultCredentials;
webRequest.Credentials = rsE.Credentials;
Stream reqStream = webRequest.GetRequestStream();
reqStream.Write(bytes1, 0, bytes1.Length);
reqStream.Close();
webResponse = (HttpWebResponse)webRequest.GetResponse();
Obwohl die requestURI der webRequest nicht speichern Parameter, es scheint, dass die GetReponse () - Funktion fügt die Parameter in der 'address' - Eigenschaft von webRequest. könnte dies das problem sein? wenn ja, wie kann es behoben werden.
InformationsquelleAutor BIdude | 2012-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, dass Sie POST-Variablen anstelle von GET? So, es gibt keine Grenzen, ich bin mir dessen bewusst, weil alle Ihre Daten geschickt werden sollen, in Pakete anstelle von HTTP-Headern.
Eigentlich sieht es aus wie Sie vielleicht mit der POST ab, was in Ihrem code. Kann man sich in den server-logs überprüfen Sie den URI, der die Ursache dieses fehlschlagen? Wenn Sie das senden von POST Daten, die request-uri sollte kein Problem sein, es sei denn, es ist in keinem Zusammenhang zu den Daten, die Sie Buchen.
InformationsquelleAutor Kasapo
Überprüfen Sie Ihre service-binding-Einstellungen. Ich denke, der service wird damit die Zeichenfolge bis zu 8192 Länge. Set te readerQuotas zu einer größeren Größe. Helfen könnte.
...
.....
InformationsquelleAutor Jay Sampat
Da Sie bereits mit der POST zu Holen, der Bericht, würde ich vorschlagen, setzen die Parameter, die Sie gerade die übergabe im query-string im request-body, statt. Querystring-Parameter, die funktionieren für eine begrenzte Anzahl von Parametern, aber nicht das richtige für eine große Anzahl von Elementen.
Bitte meinen geänderten code und änderungen in der ursprünglichen Frage oben. prost!
InformationsquelleAutor 3Dave
Können Sie zeigen den Wert webRequestURL?
Es "zu groß".
Wenn Sie die übergabe von Parametern an diese URL können Sie in den POST-body statt?
InformationsquelleAutor Andrew
webRequestURL.IndexOf("&") ... Ist das gemeint "?" anstelle von "&"? Ich vermute, konstruieren Sie eine gültige URL für die Abfrage der Seite und dann reverse Engineering Sie, um eine POST-Anfrage nach der URL vor dem ersten '&'...
Jedoch ist es möglich, die GetResponse ist, indem der Körper auf die URL, denn er sieht die Fragezeichen in der URL und setzt Voraus, dass die Parameter gehen muss in der URL? Versuchen Sie, eine genaue URL-match mit null-Parameter und kein '?'.
InformationsquelleAutor Richthofen
Habe ich diese bei der Arbeit auf meinem IIS7 Website. Habe es behoben mit einem registry-hack kann ich es suchen, aber nicht Arbeit, bevor 3/1. Inzwischen versuchen, wenn Sie erhalten die Fehlermeldung, wenn Sie die ip-Adresse statt der normalen URL, wenn Sie das nicht tun, sind die Chancen hoch, es ist das gleiche problem.
InformationsquelleAutor peter
Hatte ein ähnliches Problem, es sei denn, die POST arbeitete, aber den zweiten POST mit genau den gleichen Parametern zurückgegeben 414.
Einstellung req.KeepAlive = false; gelöst ist das problem, Gott weiß warum.
InformationsquelleAutor Timur Lyapin