La historia de mis desventuras

Palabras más, palabras menos sobre desarrollo de software.

Posts Tagged ‘ASP.NET’

Error: Acceso a carpeta ‘/Reports’ en aplicación ASP.NET requiere autenticación

Posted by Jhonny López Ramírez en 13 enero 2013

Caso

Se publica una aplicación ASP.NET en un servidor IIS. Se configura para la aplicación el acceso de usuario vía Forms Authentication. El acceso a todas las secciones del sitio web obedece correctamente a las reglas de acceso, es decir, si es requerida la autenticación para acceder a un recurso el usuario previamente deberá proveer sus credenciales de acceso. Si la aplicación cuenta con una carpeta ‘/Reports’ el acceso a esta solicita credenciales de acceso no mediante la página de Login configurada sino mediante el formulario de autenticación estándar del navegador.

Causa

En el servidor que hospeda la aplicación está simultáneamente instalado Microsoft Reporting Services. Este está configurado para escuchar las solicitudes en el puerto 80 por defecto y su URL de acceso está establecida como http://localhost:80/Reports. Esta configuración causará que se intente ejecutar Reporting Services cada vez que se acceda a la carpeta ‘/Reports’ de nuestra aplicación con toda la parafernalia de autenticación que SSRS tenga definida, aunque nuestra aplicación no esté haciendo uso de SSRS para la ejecución y visualización de los reportes.

Solución

En caso de no hacer uso de Microsoft SQL Server Reporting Services, deshabilite la ejecución del Servicio accediendo a la consola de servicios (Inicio – Ejecutar – Escriba services.msc y presione Entrar).

Solución Alternativa 1

En las situaciones en las que no se pueda deshabilitar SSRS en el servidor, o que al hacerlo se presente un error 503 al momento de ejecutar la carpeta ‘/Reports’ de nuestra aplicación proceda de acuerdo a la solución alternativa: mediante la aplicación Reporting Services Configuration Manager (disponible en Inicio –> Microsoft Sql Server <versión> –> Herramientas de Configuración –> Reporting Services Configuration Manager) actualice la URL de acceso a SSRS como se muestra en la siguiente imagen:

image

Figura 1: Se ha modificado la URL de acceso de ‘Reports’ (original) a ‘SSreports’.

Solución Alternativa 2

En caso de no poder modificar la URL de acceso de SSRS, modifique el nombre de la carpeta ‘Reports’ de su aplicación o modifique el puerto de acceso bien sea de SSRS o de su aplicación.

Fuente

https://www.interworks.com/blogs/banderton/2010/01/05/mysterious-http-authentication-required-reports

Anuncios

Posted in Desarrollo de software | Etiquetado: , , , | Leave a Comment »

MembershipProvider y .Net Framework 4.0

Posted by Jhonny López Ramírez en 24 enero 2011

dotnet4logo
Caso

Decides implementar un proveedor de membresía (o pertenencia) propio para resolver la autenticación y autorización de tus sitios web por medio de información almacenada en una base de datos de terceros (Oracle, MySql, etc.) o de servicios que están publicados a través de WCF. Adicionalmente, tendrás varios sitios web que usarán esta autenticación así que decides crear un proyecto de tipo biblioteca de clases (Class Library) con Visual Studio 2010, es decir, .Net Framework 4.0.

Como siempre has obrado en estos casos, sabes que debes escribir un proveedor de membresía personalizado que herede de la clase MembershipProvider; antes de eso debes referenciar la dll System.Web que contiene el espacio de nombres System.Web.Security. Escribes un código similar a este:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Security;
using System.Web.Security;
using System.Configuration.Provider;
using System.Configuration;
using System.Web.Configuration;

namespace MyNamespace
{
    public class MyMembershipProvider : MembershipProvider

Te das cuenta que ni el intellisense ni una compilación logran reconocer a MembershipProvider como clase dentro del espacio de nombres System.Web.Security. Luego, en un proyecto web te das cuenta que MembershipProvider sigue estando en dicho espacio de nombres, lo cual aumenta la confusión.

Causa

En .Net Framework 4.0, la clase MembershipProvider, clase abstracta de la que deben heredar todos los proveedores de membresía ASP.NET personalizados, ha sido movida al ensamblado System.Web.ApplicationServices. Por defecto, los proyectos web en Visual Studio referencian dicho ensamblado, las bibliotecas de clases (Class Library) no.

Solución

Se debe referenciar en el proyecto de tipo biblioteca de clases (Class Library) el ensamblado System.Web.ApplicationServices. Después de esto se podrá hacer uso de la clase MembershipProvider del espacio de nombres System.Web.Security.

Posted in Desarrollo de software | Etiquetado: , , | 8 Comments »

ASP.NET Dynamic Data, un vistazo

Posted by Jhonny López Ramírez en 23 noviembre 2009

Introducción

En medio de las expectativas que ha generado el framework ASP.NET MVC y la disyuntiva que supone frente al tradicional ASP.NET (modelo WebForms), y que hemos discutido ya en otra entrada, ha pasado desapercibido, desde mi punto de vista, el framework ASP.NET Dynamic Data.

¿Qué es? Podemos describirlo escuetamente como un framework que permite construir aplicaciones web funcionales fuertemente orientadas a datos basadas en modelos de datos creados en LINQ to SQL ó Entity Framework. Esto incluye mejoras en la integración entre los tradicionales controles de datos y dichos modelos, en términos de validación de datos y uso de plantillas para representar el CRUD. Para hablar en el contexto de las nuevas tendencias en el desarrollo web: se trata de un poderoso framework de Scaffolding (para quien sea nuevo este término lo podemos resumir como la técnica implementada por diferentes frameworks para, automáticamente, generar la funcionalidad CRUD de una aplicación web basada en una base de datos y metadatos que la describen).

¿Cómo tenerlo?

ASP.NET DD viene incluido en el release Service Pack 1 del Framework de .NET. Para asistir el proceso desde Visual Studio se necesita tener instalada la versión 2008 con SP1. Si se trata de Visual Web Developer Express, se necesita la versión 2008 con SP1.

Primeros pasos

Una vez tengo los prerrequisitos instalados puedo crear mi primera aplicación Dynamic Data. Usaré para esta serie de artículos sobre Dynamic Data un pequeño modelo de datos para una aplicación de Help Desk. Adjunto en esta entrada el script para crear dicho modelo en SQL Server 2005 Express.

Lo primero que debo hacer es crear el nuevo Website escogiendo la plantilla adecuada:

1

Esto generará una solución de tipo Dynamic Data Website. La estructura de archivos de este tipo de soluciones tiene varias particularidades, pero la principal es la creación de la carpeta DynamicData, como se ve en la siguiente imagen:

3

Esta carpeta está compuesta por las subcarpetas:

  • Content, que trae por defecto las imágenes de navegación entre listas paginadas y dos controles de usuario: GridViewPager, con la lógica para recorrer grillas paginadas y FilterUserControl, que se usará para establecer filtros en las páginas de listas de entidades (entidad/List.aspx).
  • FieldTemplates, que contendrá controles de usuario por defecto para la edición de los campos de una entidad.
  • PageTemplates, que contiene las plantillas para las páginas que intervienen en el CRUD de cada entidad: Details, Edit, List, Insert, ListDetails.
  • CustomPages, donde ubicaremos las páginas que creemos con comportamiento diferente al preestablecido para las entidades en las que necesitemos que sea así.

Demos un vistazo a dos de las subcarpetas:

4

 

 

 

 

 

 

 

 

 

Aquí podemos apreciar el contenido por defecto de las carpetas FieldTemplates y PageTemplates. Como decía unas líneas atrás: se trata de las plantillas que se implementarán para cada entidad y sus campos en los diferentes escenarios de uso. Es importante decir que estas plantillas pueden ser modificadas para añadir la funcionalidad a nuestro gusto o necesidad (tema de una futura entrada) por tanto no estamos, necesariamente, obligados a usarlas para nuestro sitio Dynamic Data. Sin embargo, son lo bastante útiles como para usarlas en la mayoría de los casos y sirven también como ejemplo de buenas prácticas de desarrollo. También es importante añadir que contamos con un archivo Site.css en el que podremos personalizar la apariencia del sitio.

Otro elemento de vital importancia para DD en nuestra solución es el archivo Global.asax, puesto que allí se encuentra parte de la lógica usada para el Scaffolding.

Lo siguiente que haremos será general el modelo de datos de la aplicación; en este caso usaremos LINQ to SQL como ORM de la aplicación. Omitiré los pasos para crear el modelo y muestro a continuación el resultado:

2

Una vez tengo el modelo entro a mi archivo Global.asax y busco la línea que registra el contexto de datos y reemplazo el valor YourDataContextType por el nombre del DataContext de mi modelo LINQ to SQL, que en el caso del proyecto de ejemplo es HelpDeskDataContext:

model.RegisterContext
(typeof(HelpDeskDataContext),
new ContextConfiguration()
{ ScaffoldAllTables = true });

Por defecto esta línea de código viene comentada y trae también asignado un valor false para la asignación de ScaffoldAllTables. Yo he habilitado la línea de código y he puesto true a ScaffoldAllTables, esto último para habilitar al framework a que genere la funcionalidad CRUD a todas las tablas del sistema; en caso de no querer hacerlo debería dejar el valor por defecto (false) y proceder a parcializar las clases del modelo a las que deseo generarles la funcionalidad completa anteponiendo a la declaración de la clase el atributo [Scaffold(true)]. Esto lo haremos en una futura entrada. Por ahora y con lo hecho hasta este punto podemos contar con una aplicación web con toda la funcionalidad de acceso a datos, en este caso para la base de datos que nos interesa.

Ejecutaremos la aplicación y nos encontraremos con una página inicial listando las entidades a las que se les hizo Scaffolding. De ahí en más, a explorar cada entidad y la funcionalidad generada. Esta configuración por defecto puede ser modificada.

5

Finalmente decir que el Scaffolding generado presenta problemas a la hora de insertar entidades con llaves primarias autonuméricas en tipos de datos byte y short.

Obtenga la solución de esta entrada aquí.

Obtenga el script de la base de datos de ejemplo aquí.

Posted in Desarrollo de software | Etiquetado: , | Leave a Comment »