sábado, 6 de octubre de 2012

[ASP.NET] Web Service - Publicar en IIS Windows XP (2/3)

 

Introducción


Aunque actualmente seguro se cuanta con Win 7, o alguna versión Win 2008 en un servidor, no va a faltar la ocasión que ante alguna prueba simple solo se disponga de Windows XP para montar el server web, quizás para algún uso de red local resulta simple

Se da por hecho que el IIS esta instalado en Windows, lo cual se realiza desde “Add and Remove Programs” en la opción especial “Add and Remove Windows Components”

Algo que debe aclararse antes de empezar es que el IIS de Windows XP no se pueden crear sitios web a los cuales se le asignen un puerto, esto si se puede en Win 7 o alguna las versiones de Win Server

En el IIS de Win Xp solo se pueden crear directorios virtuales que estarán bajo el default en el puerto 80

Este artículo es la continuación de

[ASP.NET] Crear y Publicar - Web Service (1/3)

 

Definición del sitio web mediante Wizard


El primer paso como es de esperar será acceder al IIS, para lo cual se deberá ir al panel del control

SNAGHTML3fac085

Se accede el IIS, sonde podemos ver el sitio por defecto configurado en el puerto 80

image

Para crear el sitio que alojara el servicio solo es necesario acceder al Wizard que nos guiara

image

image

Se define un nombre que identifique el contenido

image

Se define la carpeta donde se alojara el deploy del desarrollo

image

Si se requiere se puede cambiar las opciones de acceso al sitio, se marcaria la opción “Browse” si se requiere permitir listas los archivos si es que no se define ninguna pagina en concreto, se marcaria “Write” en caso de permitir subir archivos al sitio por medio de http

image

image

La finalización dejaría el sitio como hijo del sitio Default, es importante validar que este el icono de la caja gris, lo cual indica que se creo correctamente

image

 

Alternativa creación sitio (sin Wizard)


La alternativa arranca con la creación de la carpeta del sitio que se quiere crear, pero en esta oportunidad debe realizarse dentro del wwwroot

image

Esto permite que al actualiza el IIS se observara la carpeta recientemente creada, esta claro que mientras este solo la carpeta con el icono simple no podrá alojarse un desarrollo que cuente con un web.config y dll independiente, porque como carpeta el root sigue siendo el default

image

el siguiente paso será acceder a las propiedades

image

La opción “Create” será la encargada de convertir esa simple carpeta en un directorio virtual que pueda alijar el desarrollo

image

image

Ahora si la carpeta ha cambiado y esta lista para aceptar la publicación

image

 

Publicar desarrollo


La publicación se podría ver como en dos partes, la primera consiste en obtener la compilación del proyecto web, para esta tarea se dispone la la opción de “Publish” del Visual Studio

image

Se presentara un cuando como el siguiente

image

donde se debería ingresar una carpeta local de la pc donde se ubicara la publicación

Se puede observar el log de la tarea para validar que no se produce ningún error

image

El resultado será la publicación en la carpeta

SNAGHTML4311aa7

Esto debería copiarse y pegarse en la carpeta definida en el IIS

image

Desde el IIS se observara el cambio

SNAGHTML433d10a

Y si se accede desde el browser se podra ver la pagina web

image

y el servicio también

image

 

Configuración


Seguramente se deba realizar en algún momento el cambio de configuración en el sitio

image

Si algo no funciona seguro seria bueno validar que la extensión este definida

image

O validar los tiempos de timeout del sitio

image

Si estamos en desarrollo poder depurar seria de ayuda

image

Pero creo que verificar la seguridad es un punto clave para el funcionamiento

image

El usuario utilizado para impersonar el sitio es el definido en la opción de anónimos, si es necesario acceder a una carpeta de red o ejecutar alguna aplicación con determinados privilegios será necesario validar que ese usuario pueda hacerlo

image

Validar si la aplicación desarrollada cuenta con alguna pagina por defecto  

image

sino se cuenta con una pagina dentro de la lista de default y tampoco se define una, al acceder al sitio este fallara porque no podrá encontrar que pagina cargar,  salvo que se tenga la opción de “Browse” marcada

Validar la versión del framework es muy importante

image

si de casualidad se instalo primero el framework de .net y luego se habilito el IIS quizás haga falta ejecutar el comando

aspnet_regiis –i

para así asociar los componente de .net con el IIS

ASP.NET IIS Registration Tool (Aspnet_regiis.exe)

39 comentarios:

  1. Hola disculpa tengo una problemita, quisiera saber como puedo validar un combobox que esta dentro de un gridview la validacion seria mediante una alerta y bueno la validacion seria en este caso tengo un gridview de dos columnas la primera que es un listado de personas y la siguiente columna es el combobox y bueno al momento de seleccionar un dato del combobox normal pero si en la otra fila vuelvo a seleccionar el mismo dato me deberia de salir el mensaje, por fa ayudame muchas gracias

    ResponderEliminar
  2. hola warner

    tieens si o si validarlo al momento de la seleccion ? lo pregunto porque podrias dejar que el usuario seleccione lo que quiera y luego al confirmar en el evento click del boton recorres las rows del gridview tomando la info del combo de cada fila y validas si se selecciono algun item mas de una vez

    si se hizo generas el alert con la validacion y no continuas con el proceso

    si pasa la validacion entonces procesas los registros del gridview

    saludos

    ResponderEliminar
  3. Leandro muy buen articulo, solo una consulta si quisiera cambiar el puerto para el webservice o el sitio, para queno se escuche en el 80 sino por ejemplo en el 5454. Como lo haria??

    ResponderEliminar
  4. hola Fernando

    si estas usando Win Xp debes cambiar el puerto del "Default Web Site"

    solo ve a las propeidades de este y alli esta la opcion para cambiarlo

    saludos

    ResponderEliminar
  5. buenas leandro, entro al blog, y lo que voy a decir no tiene nada que ver con el tema pero si Ud supiera o me pudiera ayudar a encontrar la respuesta, el tema es que tengo la version de evaluacion del software System Center virtual machine manager y expiró, que tendria que hacer para obtener la llave o algun paso para poder utilizarlo nuevamente

    ResponderEliminar
  6. hola Airelis

    la verdad nunca he usado System Center, por lo que no sabria como recuperar la llave de la aplicacion

    saludos

    ResponderEliminar
  7. hola leandro nose si te llego mi duda?
    pero aki esta otra vez....
    --> se puede usar el metodo response en una funcion dentro de una clase, todo esto lo que quiero hacer una funcio global para exportar gridview a excel( pasando conmo paranmetro una grilla)...
    ya lo hice pero me marca error
    ...en response

    ResponderEliminar
  8. hola germanRive

    si puede hacerlo, debes agregar al referencia a System.Web
    y luego usas
    HttpContext.Current.Response

    saludos

    ResponderEliminar
  9. gracias leandro ya me salio la funcion y exporta y todo....pero al meterlo en un try catch...cae el el catch excepxion y me dice" eror al evaluar la propiedad" y ya le buske y no hayo la solucion...

    HttpContext.Current.Response.End() con esta linea da la eexcepcion, y sin en vez de ' end' y pongo 'flufh' no da excepcion pero el detalle esta en ke me manda todo lo que tengo en la pagina)...alguna idea leandro para solucionar esto

    ResponderEliminar
  10. hola germanRive

    que raro el mensaje del error, lo exportas similar a como se realiza aqui

    http://social.msdn.microsoft.com/Forums/es/netfxwebes/thread/f1c9fa68-9efe-4cf3-9519-1cb56bbc41e7

    o sea hacer el Response.Clear() al comienzo

    saludos

    ResponderEliminar
  11. asi es leandro utilo el mismo codigo de ahy.. ttpContext.Current.Response .Clear(), porque lo tengo en una funcio n como te dije anteriormente....

    ResponderEliminar
  12. Hola leandro. Tengo un problema en una pagina que estoy realizando en asp.net con Visual Studio 2012.
    Cuando coloco un Control de Validacion(RangeValidator) a un objeto asociado (TxtBox) no me muestra el error y lo estoy programando igual que en el Visual 2005 en el cual me funciona correctamente.
    Sabrias que puede ser?

    Muchas Gracias

    ResponderEliminar
  13. hola Miguel

    no obtienes tampoco ningun error de javascript ?

    que pasas si creas un proyecto nuevo de prueba y colocas solo un textbox y un RangeValidator, alli si funciona?

    esto es para descartar si es un problema del proyecto que estas creando o es algo general

    saludos

    ResponderEliminar
  14. No me tira ningun error. Primero pense que era un error en el proyecto que tenia creado, pero despues lo probe con un proyecto nuevo y es lo mismo.
    Vos probaste estos controles en Visual 2012?

    ResponderEliminar
  15. hola Miguel

    la verdad no lo he probado con VS 2012

    ResponderEliminar
  16. Hola Leandro,
    Perdón por preguntar un tema q no pertenece a esta entrada pero no encontré donde mas hacerlo, si me puedes direccionar te agradezco.

    Estaba leyendo tu respuesta sobre el tema:
    http://social.msdn.microsoft.com/Forums/es/netfxwebes/thread/b82fde25-8640-4568-94c9-40d6aa98b03b

    y estoy totalmente de acuerdo en q se debe tomar la hora del servidor, pero no se podrá asignar la zona horaria de un país especifico a la aplicación desde el web.config? así como se asigna el idioma y otras variables culturales en la etiqueta globalization?

    ResponderEliminar
  17. hola fercho

    hasta donde se la zona horaria se define especificando la cultura

    si notas que con este no se determina quizas en cada request debas asignar el Thread.CurrentThread

    http://www.dotnetfunda.com/codes/code1084-convert-the-time-according-to-the-timezone.aspx

    al definir una cultura cambias el TimeZone

    saludos

    ResponderEliminar
  18. Ola Leandro, primero que nada quiero felicitarte por esta aportación tan valiosa que ayuda a mucha mas gente de las que comentamos... ahora va mi pregunta, seguí los pasos para hacer la publicación ya que yo tengo mi propia aplicación web pero ocupo publicarla, entonces seguí los pasos que indicas pero al intentar entrar desde el navegador me dice en el chrome "Directory listing Denied" y desde el explorer me dice que no estoy autorizado para ver la página... revisé la seguridad y se muestra tal y como muestras en tu imagen... lo que si le faltaba era la versión de asp.net y le puse la 2.0.50727... ya le apliqué el comando regiis -i para la version 2.0.50727 y siguió todo igual y la cambie a la 4.0 y apliqué regiis -i de nuevo en la carpeta v4.0 y todo sigue igual... que podrá ser?

    ResponderEliminar
  19. hola Primate

    lo de la version de .net no es cuestion de aplciar cualquier, sino que debes usar en el sitio la misma que usaste para desarrollar, no es cuestion de aplciar por aplicar

    con respecto al error probaste poner en el browser la url hacia una pagina en concreto? o sea poner

    http://sitio:puerto/pagina.aspx

    pero escrine la pagina aspx a la cual accedes, porque a veces sino hay una pagina por defecto y la opcion de browse del sitio no esta permitido muestra ese mensaje

    saludos

    ResponderEliminar
  20. De hecho cuando hice la aplicación la hice en framework 3.5 y lo noté hasta despues y la baje a 2.0, ahorita desinstalé el iis y lo volví a instalar para hacer todo desde cero, y con respecto a tu pregunta, sobre si intententé esto "http://sitio:puerto/pagina.aspx" lo que realmente intenté fue... "http://localhost/sitio/pagina.aspx"... pero ahorita lo intento como dices tu....


    saludos y gracias por la pronta respuesta...

    ResponderEliminar
  21. No funcionó :s... ya no se que pueda ser... mi aplicación es solamente una página que se conecta a una base de datos en sql, ademas tiene un proyecto donde agrego 2 clases... no se me ocurre nada ya :S...

    ResponderEliminar
  22. hola Primate

    estas usando Win Xp ? porque en este no puedes crear puertos en el IIS

    porque no pruebas creando un proyecto simple de cero en el VS, solo ubica un textbox y un boton y publicalo, recuerda que la version que uses es l aque debes tener en el iis, pero ojo si usas .net 3.5 seguiras usando .net 2 en el sitio web

    podrias probar ejecutando el aspnet_regiis -i para registrar .net de forma correcta en el iis

    saludos

    ResponderEliminar
  23. lo intenté en otra computadora y funcionó... creo que ya le moví tanto que he de haber dañado algún archivo... lo bueno es que ya se como ahcerlo... gracias.

    ResponderEliminar
  24. buenas tardes leandro: tu post esta muy bueno y es de mucha ayuda, pero me gustaria saber como hacer para certificar con ssl un web service para que cualquiera que obtenga la direccion donde esta publicado, no pueda acceder a la informacion

    ResponderEliminar
  25. hola veronica

    el certificado lo debes configurar en el IIS

    IIS 7 SSL Certificate Installation

    saludos

    ResponderEliminar
  26. Leandro:

    Desarrollo una página que usa el control .visible, y estoy teniendo problemas en la sesion. Detallo:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;


    public partial class Textos : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    NAVASN.Visible = false;
    PORCEN.Visible = false;
    NAVASP.Visible = false;
    PORCEP.Visible = false;

    if ((string)Session["autor"] != "")
    {
    Label1.Text = "FUNCIONA HASTA 1ER IF, SESSION != ''";
    Label2.Text = (string)Session["autor"];
    if ((string)Session["autor"] == "NAVASN")
    {
    Label2.Text = "RECONOCE " + Session["autor"];
    Session["autor"].Visible = true;
    PORCEN.Visible = false;
    NAVASP.Visible = false;
    PORCEP.Visible = false;

    }
    else if ((string)Session["autor"] == "PORCEN")
    {
    Label2.Text = "RECONOCE PORCEN";
    NAVASN.Visible = false;
    PORCEN.Visible = true;
    NAVASP.Visible = false;
    PORCEP.Visible = false;

    }
    else if ((string)Session["autor"] == "NAVASP")
    {
    Label2.Text = "RECONOCE NAVASP";
    NAVASN.Visible = false;
    PORCEN.Visible = false;
    NAVASP.Visible = true;
    PORCEP.Visible = false;

    }
    else if ((string)Session["autor"] == "PORCEP")
    {
    Label2.Text = "RECONOCE PORCEP";
    NAVASN.Visible = false;
    PORCEN.Visible = false;
    NAVASP.Visible = false;
    PORCEP.Visible = true;

    }
    }
    else
    {
    Label1.Text = "SESION VACIA";
    }
    }

    protected void NAVASN_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    }

    ResponderEliminar
  27. hola Humberto

    no entendi, cual seria el problema con la session
    y porque dices que la propeidad visible estaria afectando

    imagino antes de redireccionar a la pagina y que ingrese al Page_Load asignas un valor a la key "autor" de la session, no?

    saludos

    ResponderEliminar
  28. Hola Leandro
    Tengo una duda respecto al tema,
    ya que seguí todos tus pasos tal y como indicas, y lo que sucede es que
    es que al momento de querer entrar a la pagina desde el explorador, me sale un mensaje indicando lo siguiente:
    "Server Application Unavailable

    The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.

    Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur."

    Y la verdad no tengo idea de porque sea.
    Estoy ocupando Win xp y Famework 4.0, espero y me pueda ayudar
    :)

    ResponderEliminar
  29. hola Miguel

    pero esto sucede cuando ejecutas desde el VS o cuando publicas he ingresas a la url del sitio en el IIS ?

    validaste que el Application Pool este iniado?

    el sitio lo pones dentro de Default Web Site, no? si es asi crear un directorio virtual

    saludos

    ResponderEliminar
  30. Esto sucede cuando publico e ingreso a la url del sitio en el IIS
    supongo que es por que no lo he iniciado en Application Pool.
    Y es por que no se como, te agradecería mucho que me ayudaras

    ResponderEliminar
  31. hola Miguel

    lo del virtual directory lo validaste ? pones tu desarrollo en una carpeta o directo sobre en la carpeta del "default web site"

    validaste como explico en el articulo la solapa de ASP.NET seleccionado el framework correcto?

    saludos

    ResponderEliminar
  32. Hola, tengo un problema con el sitio, cuando lo publico una de mis paginas aspx se quedan sin funcionalidad y no entiendo porque. Es decir tengo un menu en todas las páginas, al hacer clic sobre un ítem debe salir un textbox o gridview según el caso pero simplemente no hace nada. Alguna idea, gracias.

    ResponderEliminar
  33. hola Eliana

    esto sucede cuando publicas, o cuando ejecutas desde el VS tambien ?
    esto sucede en todas las paginas o solo en una sola donde tienes el textbox y el gridview ?

    intentaste definir el EmptyDataTemplate del grid para ver si el hecho de no ver nada se deba a que no se estan cargando datos

    saludos

    ResponderEliminar
  34. Gracias por contestar, sucede cuando lo publico en el iis, en vs si funciona, es decir, cuando le pruebo en el explorador, y esto sucede solo con una de mis páginas.
    Le coloque un textbox para que al hacer clic en el menú se haga visible pero ni eso funciona, no se que sucede. Te agradezco cualquier pista.

    ResponderEliminar
  35. hola Eliana

    pero si pones unos textbox en esas paginas no ves siquiera los controles?

    o lo que no visualizas son los datos que se obtienen de la db dentro de los controles ?

    estas definiendo algun try...catch en el codigo sin loguear el error a un archivo, porque puede que un error que no redirecciona a ningun lado sea el problema

    sino controla los errores en el page_load y loguea a un archivo por donde pasa la ejecucion

    saludos

    ResponderEliminar
  36. hola, gracias por la ayuda, pero resulta que era problema del crystal por así decirlo, para solucionarlo coloque la carpeta aspnet_client en donde se encontraba la página con el problema y funciono. Ahora quisiera me orientes como publico mi sitio web iis en internet, es decir, para que lo vea cualquiera, no solo lo que se encuentren en red. Muchas gracias por tomarte tu tiempo.

    ResponderEliminar
  37. hola Leandro, fijate que me sale este error al momento de jalar un archivo de Excel de mi computadora:

    Error de servidor en la aplicación '/'.
    No se pudo recuperar el generador de clases COM para el componente con CLSID {00024500-0000-0000-C000-000000000046} debido al siguiente error: 80070005 Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED)).

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.UnauthorizedAccessException: No se pudo recuperar el generador de clases COM para el componente con CLSID {00024500-0000-0000-C000-000000000046} debido al siguiente error: 80070005 Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED)).

    ASP.NET no está autorizado para obtener acceso al recurso solicitado. Considere la posibilidad de conceder derechos de acceso al recurso para la identidad de solicitud de ASP.NET. ASP.NET tiene una identidad de proceso base (normalmente {MACHINE}\ASPNET en IIS 5 o Network Service en IIS 6 e IIS 7, y la identidad del grupo de aplicaciones configurada en IIS 7.5) que se utiliza si la aplicación no se va a suplantar. Si la aplicación se va a suplantar mediante , la identidad será el usuario anónimo (generalmente IUSR_MACHINENAME) o el usuario solicitado autenticado.

    To grant ASP.NET access to a file, right-click the file in File Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.


    Y este error cuando quiero ver mis reportes que hice con crystal reports:

    Error de servidor en la aplicación '/'.

    Acceso denegado. - DTSConnection

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.UnauthorizedAccessException: Acceso denegado. - DTSConnection

    ASP.NET no está autorizado para obtener acceso al recurso solicitado. Considere la posibilidad de conceder derechos de acceso al recurso para la identidad de solicitud de ASP.NET. ASP.NET tiene una identidad de proceso base (normalmente {MACHINE}\ASPNET en IIS 5 o Network Service en IIS 6 e IIS 7, y la identidad del grupo de aplicaciones configurada en IIS 7.5) que se utiliza si la aplicación no se va a suplantar. Si la aplicación se va a suplantar mediante , la identidad será el usuario anónimo (generalmente IUSR_MACHINENAME) o el usuario solicitado autenticado.

    To grant ASP.NET access to a file, right-click the file in File Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

    y la verdad que ya estoy algo desesperada, no se si tenga que ver que mi windows7 es de 64bits, porque la aplicacion la he puesto en una maquina de 32bits y corre.

    Agredesco desde ya tu ayuda. :D

    ResponderEliminar
    Respuestas
    1. respecto a los 64 o 32 bits recuerda que en el IIS debes habilitarlo

      - primero debes cambiar el Platform Target de proyecto a x86

      - despues debes habilitarlo en el iis imagen

      saludos

      Eliminar