Error del servidor después de modificar la httprequest actual

He estado en esto durante demasiado tiempo y estoy seguro de que alguien podrá señalar mi error en cuestión de segundos.

Mi empresa tiene una aplicación para ipad que descarga materiales de venta para nuestros vendedores (powerpoints, videos, etc.). Todos los recursos están en una biblioteca de documentos dentro de SharePoint. En lugar de hacer que la biblioteca de documentos sea pública (y menos segura), creé una página .aspx con un elemento web que recupera los documentos. La aplicación para ipad se pone en contacto con la página .aspx y envía dos consultas: "token" y "documento". El token es esencialmente una contraseña para que el elemento web sepa que proviene de la aplicación de iPad. Si el token es correcto, el elemento web obtendrá cualquier documento que se especifique.

Aquí está mi problema. El documento se recupera y se entrega como debería, pero luego, si trato de descargar otro documento o navego a cualquier otro lugar del servidor, aparece un error del servidor. Tengo que cerrar el navegador (también conocido como finalizar la sesión).

El error que estoy recibiendo se explica aquí: http://blog.tylerholmes.com/2008/07/problem-with-sharepoint.html

Sin embargo, no quiero usar la solución en ese blog, porque sé que mi código está causando el problema y quiero solucionar la raíz del problema.

Mi código de elemento web está a continuación:

protected override void CreateChildControls()
    {
        string toRender = string.Empty;
        SPWeb webInUserContext = SPContext.Current.Web;
        SPSite SiteInUserContext = SPContext.Current.Site;
        Guid webGuid = webInUserContext.ID;
        Guid siteGuid = SiteInUserContext.ID;

         //gives visitors the authority to see the dam data
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite site = new SPSite(siteGuid))
            {
                using (SPWeb web = site.OpenWeb(webGuid))
                {
                    using (DAM dam = new DAM())
                    {
                        String mystring = HttpContext.Current.Request.Url.AbsoluteUri;
                        //If the request contains the correct token
                        if (mystring.ToString().Contains("REgrgg0434GgdLk6"))
                        {
                            //Get the document data into a byte array
                            byte[] buf = new byte[0];
                            using (var wc = new System.Net.WebClient())
                            {
                                //Right now I'm just hard-coding a document url for testing, rather than
                                //getting it from the url query
                                String url = "http://web-dev/sites/damedit/DocLibrary/document.ppt";
                                System.Net.CredentialCache cc = new System.Net.CredentialCache();
                                cc.Add(new Uri(url), "NTLM", new System.Net.NetworkCredential("username", "password", "domain"));
                                wc.Credentials = cc;
                                buf = wc.DownloadData(url);
                            }

                            //Rewrite the current response so that it contains the document
                            HttpContext.Current.Response.Clear();
                            HttpContext.Current.Response.ContentType = "application/pdf";
                            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"document.ppt\"");
                            HttpContext.Current.Response.BinaryWrite(buf);
                            HttpContext.Current.Response.Flush();
                            HttpContext.Current.Response.End();
                        }
                    }
                }
            }
        });
        base.CreateChildControls();
    }

Cualquier ayuda sería muy apreciada!

preguntado el 03 de mayo de 12 a las 21:05

¿Está 100% seguro de que el error al que se vinculó es su error? Pregunto esto porque el iPad (o más específicamente, Mobile Safari) tiene grandes problemas para manejar la cadena de respuesta 401,401,200 que requiere NTLM. -

Sí, porque aún no lo he probado en la aplicación para iPad. Solo estoy escribiendo la URL en un navegador para asegurarme de que el elemento web obtenga y entregue el documento correctamente. El objetivo de este elemento web es manejar toda la autenticación para que la aplicación de iPad no tenga que hacerlo. -

1 Respuestas

Bien, he encontrado la solución. Todo lo que tenía que hacer era quitar el HttpContext.Current.Response.Flush(); línea. Resulta que la siguiente línea de código, HttpContext.Current.Response.End (); hace lo mismo que el método Flush, envía una salida de respuesta al cliente. Por alguna razón, al servidor no le gusta cuando llamas a estos dos métodos. ¡Espero que esto ayude a alguien!

contestado el 04 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.