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

Schreibe einen Kommentar