Archivo de la etiqueta: Visual Studio

Hablemos de Herencia


Una de las características más importantes de la programación orientada a objetos, es la posibilidad de estructurar mostró código en distintos niveles o capas, de modo tal de poder ir encapsulando funcionalidades desde las más básicas hasta las más complejas, incluyendo modificaciones en la funcionalidad de cualquiera en otros objetos, dependiendo de con quién están tratando o qué tipo de datos se van manipular o acciones a realizar.

Sin embargo, esto tiene una contrapartida; si no se piensan adecuadamente las cosas a implementar, se puede caer en una Maraña de códigos que van llamando funcionalidades hay into niveles y por tanto a ser que dicho código resulte un poco inmanejable, o inclusive que tienda a a incrementar las posibilidades de error.

Por tanto, lo más importante de todo, más allá de conocer las distintas te indica y sintaxis respecto escritura de código, es la comprensión clara de que se trata precisamente esto de la herencia.

Desde la realidad.

La mejor manera de comprender esto entonces, es observar que es lo que sucede dentro de la naturaleza. Así por ejemplo, podemos consideran desde el punto de vista biológico, que absolutamente cualquier ente vivo compre cuatro funciones básicas a saber:

  • Nacer
  • Crecer
  • Reproducirse
  • Morir

Cada reino y cada especie a su vez, podrán realizar cualquiera de estas actividades de distinta forma e inclusive podrán incrementar sus características, dependiendo del grado el colectivo.

Tomemos por caso la producción de energía: en todos los seres vivos este hecho en necesario, pero la forma de hacerlo es totalmente diferente cuando hablamos del reino vegetal y el reino animal. Entretanto agreguemos sencillamente esta funcionalidad,  imprescindible en cualquier ente vivo.

  • Generar energía.

Así, el reino vegetal utiliza en General la fotosíntesis, mientras que en el reino animal la generación de energía se produce por mecanismos de digestión de los alimentos. Para decirlo muy genéricamente, los vegetales toman sol, los animales combing.

 

Sin embargo, cualquiera estados acciones están pensadas para obtener el mismo resultado: energía.

 

Si fuésemos must identificó extraterrestre, lo que trataremos de investigar es precisamente, más en estas cosas que están en el planeta tierra para generar energía. Nos encontraríamos entonces que investigando la generación, veríamos dos mecanismos totalmente diferentes entre sí (en realidad no son tan diferentes desde un punto de vista bioquímico dado que termina en procesos bastante similares y que en alguna parte son los mismos).

Podríamos entonces considerar que, cualquiera sea vegetal o animal hereby características que son comunes: las cinco que hemos indicado con viñetas.

Cierto es también, que alguna de esas actividades por ejemplo generar energía, si bien desde fuera (científico extraterrestre) lo veríamos cómo una sola acción, internamente cada uno de los reinos lo estaría realizando de maneras diferentes.

Esto nos lleva a entender algunas definiciones respecto the la exposición de las funcionalidades desde nuestros objetos hacía observadores externos, o para darles un hombre más adecuado a nuestro entorno, llamadores or instanciadores.

Interfaz

Una interfaz es en definitiva, un contrato que los objetos confirman respecto de cómo se exponen a sí mismos y como brindan sus funcionalidades de modo tal que cualquier otro objeto que pretenda utilizar los tenga claro cuáles son los mecanismos y propiedades que podrá encontrar en dichos objetos.

La interfaz en definitiva, es una tipificación de que miembros, entendiendo como miembros el conjunto de propiedades, métodos y eventos, que expone un objeto y cuáles son las posibles formas de utilizarlos en cada caso. Se dice que cada miembro expone una firma o sea el nombre por el que se lo llamará, los argumentos que puede recibir, y el tipo de valor que retornará.

A veces el propio objeto será responsable de exponer su interfaz, mientras que en otros casos la interfaz será declarada en forma independiente y luego implementada por el objeto en cuestión.

 

Además, en términos de herencia, una clase que sirve como base para definir otras puede ser responsable de definir la interfaz que va a ser común a todas ellas, aunque a su vez las descendientes podrán tener miembros agregados que modifiquen o expandan la interfaz de cada uno de ellos.

Ejemplo

En conclusión entonces, podríamos crear una clase para el ejemplo que esté utilizando llamada SerVivo que tendría cinco métodos, como se muestra en el siguiente esquema.

image

Una segunda clase que hereda de esta llamada Vegetal, y que dentro del miembro genera energía utilizará los métodos de fotosíntesis.

image

Y otra clase que hereda también de SerVivo, llamada Animal que en el miembro generar energía utilizará procedimientos de digestión.

image

Algunas cuestiones de imagen.

Tenemos bastante para hablar respecto de cómo se representa las cosas, sin embargo para esta primera entrega quiero dejarle claro los elementos que estamos viendo en estos tres gráficos.

En principio un rectángulo de bordes redondeados representa una clase: lo sabemos además porque debajo del nombre precisamente aparece la palabra class.

Cada método está definido por debajo del grupo métodos, como un cubo con el nombre del método su lado. En el caso de la clase SerVivo, uno de ellos aparece en cursiva porque si bien la clase y lo define, no lo tiene implementado; delega la implementación en cada una de las clases que heredan de esta; decimos entonces que ese método debe heredarse, y normalmente una clase  que tiene métodos con estas características pasa a ser también una clase que obligadamente debe heredarse.

Finalmente, los métodos Fotosíntesis de la clase Vegetal y Digestión de la clase Animal están representadas como métodos con un cubo pero con el icono de un candado abajo la derecha: esto significa que ese método es privado a la clase y por tanto no es accesible desde fuera por parte de ningún otro objeto. Los miembros GenerarEnergía de Animal y de Vegetal internamente deberán llamar cada uno al que le corresponde.

image

En la representación gráfica del conjunto completo, la clase SerVivo tiene un indicador de que debe heredarse y  a su vez las clases Vegetal y Animal indican con una flecha hacia la derecha que heredan de SerVivo. Finalmente el diagrama General no representa esto gráficamente con las flechas que apunta desde las clases derivadas hacia la clase base

En la próxima entrega estaremos analizando cómo quedaría dicho código.

Anuncios

Mejorando la toma de decisiones


Ya vimos como se puede “traducir” de un proceso lógico, a sentencias en los lenguajes más comunes.

Sin embargo, esto, muy lineal, puede mejorarse utilizando las ventajas de los lenguajes. De eso va la publicación de hoy. Distintas formas de establecer lógica.

Los operadores lógicos.

La primera opción de mejora que tenemos, es la de combinar decisiones lógicas entre si: Esto es si tengo que preguntarme, por ejemplo, el tema de los meses:

image

En la publicación anterior, utilizamos 4 sentencias “if”, una detrás de otra. ¡Y sus respectivas acciones!  1530413_690331531007178_1565415261_n

Sin embargo, podríamos encadenar las comparaciones, como diciendo: “si el mes es 4, o es 6, o es 9, o es 11…” y para eso sirven los operadores lógicos.

Esta tabla contiene los más comunes.

Operador VB C# Detalles
Y And & Si ambas condiciones se cumplen
Y también AndAlso && Si la primera se cumple se evalúa la segunda
O Or | Si una u otra
O sino OrElse || Si la primera se cumple, no se llega a evaluar la segunda
O Excluyente Xor ^ Solo una de las condiciones ha de ser verdadera
NO Not ! Negación de la condición

Entonces, la codificación del ejemplo de la publicación, quedaría:

VB

        If mes < 1 
            OrElse mes > 12 
            OrElse día < 1 
            OrElse día < 1 
            OrElse día > 31 
            Then
            EsVálida = False
            Return EsVálida
        End If

CS

            if (mes < 1 || 
                mes > 12 || 
                día < 1 || 
                día < 1 || 
                día > 31)
            {
                EsVálida = false;
                return EsVálida;
            }

Encadenado de condiciones

A veces, no es cuestión de juntar condiciones, sino de establecer acciones dependiendo de distintas condiciones.

Si pasa esto, entonces hago a, pero si no pero pasa esto otro, entonces hago esto otro. A eso, lo podríamos denominar, “decisiones en cascada”.

Si la condición es if, y la acción por el opuesto es else, pero a su vez debo preguntar otra cosa, debería poner uno dentro del otro (anidado). Por ejemplo:

        If condición1 Then
        Else
            If condición2 Then

            End If
        End If

Sin embargo, existen sentencias más precisas para esto:

VB

        If condición1 Then

        ElseIf condición2 Then

        End If

CS

            if (condición1)
            {

            }
            else if (condición2)
            {
            }

Selectores de valor

A veces, las decisiones pasan por coincidencias de una variable con ciertos valores y de acuerdo a ello, se toman distintas acciones (como con los meses de 30 días, por ejemplo).  Para ello existen los “selectores de valor”. En ellos, se permite agrupar sentencias por ciertos valores específicos (uno o más), y además, se da la opción de realizar acciones cuando ninguno coincide.

VB

        Select Case variable
            Case valor1
                acción1()
            Case valor2
                acción2()
            Case valor3
                accion3()
            Case Else
                accionExcluyente()
        End Select

CS

            switch (variable)
            {
                case valor1:
                    acción1();
                    break;
                case valor2:
                    acción2();
                    break;
                case valor3:
                    accion3();
                    break;
                default:
                    accionExcluyente();
                    break;
            }

Los selectores posibilitan además, que una misma acción se aplique a varios valores:

VB

        Select Case variable
            Case valor1, valor2
                acción2()
            Case valor3
                accion3()
            Case Else
                accionExcluyente()
        End Select

CS

            switch (variable)
            {
                case valor1:
                case valor2:
                    acción2();
                    break;
                case valor3:
                    accion3();
                    break;
                default:
                    accionExcluyente();
                    break;
            }

A veces, se puede hacer “trampa” con los selectores.  EL ejemplo de la validación de fecha es un buen caso: hay varios motivos distintos por los cuales una fecha puede ser inválida. Entonces, se puede codificar, dentro del Select, todas ellas. Pero … estamos comparando días y meses… son cosas distintas (“cerdos con velocidad al cuadrado”, decía mi padre Sonrisa ).  Pero funciona.

VB

        Dim EsVálida As Boolean = True
        ' Selecciona cualquier caso que resulte verdadero
        Select Case True
            Case día < 1, día > 31, mes < 1, mes > 12
                EsVálida = False
            Case mes = 4, EsVálida = 6, mes = 9, mes = 11
                EsVálida = día < 31
            Case mes = 2
                If año Mod 4 = 0 Then
                    EsVálida = día < 30
                Else
                    EsVálida = día < 29
                End If
        End Select

CS

¡No Funciona!  En C# no se admite…

Una Nota:  Cuando una condición hace que la salida sea un valor verdadero o falso, no es necesario “encerrarlo” en un if. Como en la sentencia EsVálida = día < 30.

También, si debes preguntar si una variable contiene verdadero o falso, no cometas el error de preguntar si la variable es igual a verdadero. Más pasos del procesador para obtener el mismo resultado.

O sea, las dos sentencias que siguen, son idénticas… pero la de abajo es un poquito más rápida (se notará con muchos usos, no con uno solo).

VB

        If condición = True Then

        End If
        If condición Then

        End If

CS

            if (condición == true)
            {
            }
            if (condición)
            {
            }

En la próxima,  hablaremos de bucles y repetidores.

Pero… ¿Que es un programa?


Acostumbrados estamos a usar programas de todo tipo.

Pero la pregunta del título no es tan fácil de responder.

Los programas, como es obvio, evolucionaron, pero si podemos decir que hay algo básico que sigue siendo cierto:

Un programa es una sucesión de acciones.

Antaño, cuando programar no era tan sencillo (ni barato Sonrisa ), era necesario tener bien claro cada paso. Un programa podían ser de cientos de líneas… o sea cientos de tarjetas perforadas… que si había un error, habría que re codificar. Tiempo, costo, etc.

Por eso, se diseñó una metodología para esquematizar el programa y hacer pruebas de su funcionalidad previas a cualquier codificación.

La diagramación lógica.

Se basa en esquematizar un proceso paso a paso. Hay diseños estándar para representar los distintos tipos de actividades.

image 

Los “terminadores” (Inicio y fin), establecen precisamente eso, los extremos del proceso.

Las acciones, como se ve en el diagrama, se representa por rectángulos.

Por supuesto, a estas alturas, nadie usa diagramación lógica para programar. 

Sin embargo, en este blog haré uso de ellos; de cuando en vez,  echaré mano a ellos, para contarte mejor de que va algo.

Ejemplo simple (y, de paso, sentencias de control de flujo).

Si bien ahora el .Net Framework es capaz de hacer matemática de fechas (en realidad, desde bastante antes, lenguajes como Visual Basic, o los dBase, ya lo tenían), hubo épocas en que las fechas se debían ingresar en campos separados (día, mes y año), y luego validarla adecuadamente. Insisto, no es una problemática actual pero sirve para equiparar diagramas y códigos.

Aunque parezca simple, se lleva varios pasos.

  • El mes no puede ser menor de uno.
  • El mes no puede ser mayor que doce.
  • El día no puede ser menor de uno
  • El día no puede ser mayor que 31
  • Si el mes es abril, junio, setiembre o noviembre, el día no debiera ser mayor que 30.
  • Si el mes es febrero, no debiera ser mayor que 28, excepto si el año es bisiesto, que no podrá ser mayor que 29.

image

Bueno, como se ve, los rombos simbolizan preguntas (en realidad, toma de decisión lógica). No existe un “estándar” para indicar las salidas, aunque suelen marcarse con “si y no”. En el diagrama, usé colores, que también sirve.

La sentencia de decisión lógica.

En definitiva, es una pregunta:

SI sucede esto ENTONCES hacemos esto.

VB

        If condición Then
            acción()
        End If

CS

            if (condición)
            {
                acción;
            }

En ocasiones, es cuestión de tomar acciones alternativas, dependiendo del valor lógico, como la decisión del año bisiesto:

image

VB

        If Bisiesto Then
            If Día > 29 Then
                acción()
            End If
        Else
            If Día > 28 Then
                acción()
            End If
        End If

CS

            if (Bisiesto)
            {
                if (Día>29)
                {
                 acción;           
                }
            }
            else
            {
                if (Día > 28)
                {
                    acción;
                }
            }

En conclusión, el diagrama completo (exceptuando que en realidad las variables no existen), sería

VB

        EsVálida = True
        If Mes < 1 Then
            EsVálida = False
            Return EsVálida
        End If
        If Mes > 12 Then
            EsVálida = False
            Return EsVálida
        End If
        If Día < 1 Then
            EsVálida = False
            Return EsVálida
        End If
        If Día < 1 Then
            EsVálida = False
            Return EsVálida
        End If
        If Día > 31 Then
            EsVálida = False
            Return EsVálida
        End If
        If Mes = 4 Then
            If Día > 30 Then
                EsVálida = False
                Return EsVálida
            End If
        End If
        If Mes = 6 Then
            If Día > 30 Then
                EsVálida = False
                Return EsVálida
            End If
        End If
        If Mes = 9 Then
            If Día > 30 Then
                EsVálida = False
                Return EsVálida
            End If
        End If
        If Mes = 11 Then
            If Día > 30 Then
                EsVálida = False
                Return EsVálida
            End If
        End If
        If Mes = 2 Then
            Bisiesto = (Año Mod 4 = 0)
            If Bisiesto Then
                If Día > 29 Then
                    EsVálida = False
                End If
            Else
                If Día > 28 Then
                    EsVálida = False
                End If
            End If
        End If
        Return EsVálida

CS

            EsVálida = true;
            if (Mes < 1)
            {
                EsVálida = false;
                return EsVálida;
            }
            if (Mes > 12)
            {
                EsVálida = false;
                return EsVálida;
            }
            if (Día < 1)
            {
                EsVálida = false;
                return EsVálida;
            }
            if (Día < 1)
            {
                EsVálida = false;
                return EsVálida;
            }
            if (Día > 31)
            {
                EsVálida = false;
                return EsVálida;
            }
            if (Mes == 4)
            {
                if (Día > 30)
                {
                    EsVálida = false;
                    return EsVálida;
                }
            }
            if (Mes == 6)
            {
                if (Día > 30)
                {
                    EsVálida = false;
                    return EsVálida;
                }
            }
            if (Mes == 9)
            {
                if (Día > 30)
                {
                    EsVálida = false;
                    return EsVálida;
                }
            }
            if (Mes == 11)
            {
                if (Día > 30)
                {
                    EsVálida = false;
                    return EsVálida;
                }
            }
            if (Mes == 2)
            {
                Bisiesto = (Año % 4 == 0);
                if (Bisiesto)
                {
                    if (Día > 29)
                    {
                        EsVálida = false;
                    }
                }
                else
                {
                    if (Día > 28)
                    {
                        EsVálida = false;
                    }
                }
            }
            return EsVálida;

NOTA: Este código dista de ser óptimo y NO debe usarse como ejemplo…. solo es útil para entender la lógica. Ya veremos otras versiones.

Hasta la próxima.

Las variables


Cuando empezamos a trabajar en programación, obviamente nos encontramos en la situación que querer guardar valores para usarlos más tarde.

O sea, reservar un espacio en la memoria de la computadora (ordenador), por cada valor que queremos utilizar.

Obviamente, poder identificar cada una de las que quieras usar, implica darles un nombre. Ese es entonces el concepto de variable.

Por otra parte, en muchos (no en todos), los lenguajes de programación se puede decir además, que tipo de dato va a almacenarse allí.

Cada lenguaje de programación utiliza su sintaxis para esto, como los dos siguientes ejemplos, donde vemos declaraciones de una variable de tipo entero y otra para almacenar caracteres.

VB
    Dim Entero As Integer
    Dim Cadena As String

CS

 

        int Entero;
        string Cadena;

También es posible darle a cada variable un valor predeterminado.

(No solo se puede, Es lo recomendado, para que no haya errores) Sonrisa

    Dim Entero As Integer = 0
    Dim Cadena As String = ""
        int Entero = 0;
        string Cadena = "";

Obviamente esto vale para cualquier tipo de dato, inclusive objetos complejos. Y así, se reservan espacios para cualquier uso. Sin embargo, existen algunas cuestiones más para tener en cuenta.

Alcance. (Ámbito)

Se define como alcance o ámbito, la característica que determina en que parte del código existe realmente cada variable.

Para determinar esto, existen dos mecanismos distintos; uno posicional y otro declarativo.

Declarativo.

En la siguiente tabla vemos los modos posibles:

Tipo
Definición
CS
VB
Público La variable es visible en el mismo módulo de código y puede accederse desde fuera
public
Public
Privado Existe en el mismos segmento de código donde se declara
private
Private
Protegido Es visible para el mismo módulo y cualquiera que herede de él (este concepto es útil entre clases que veremos más adelante)
protected
Protected
Conocido (amigo) Es visible para cualquier conjunto de código dentro del mismo proyecto, pero no desde otros
internal
Friend
Protegido o conocido La combinatoria de ambas anteriores
(Considerando que una clase puede heredar de otra que se haya definido en otro proyecto o biblioteca de carga dinámica)
protected internal
Protected Friend

Posicional.

Por otra parte, una variable tiene el ámbito del conjunto de código dentro del cual se declara.

Cuando la declaración se realiza en el conjunto de código (clase, por ejemplo), estará disponible en todos y cada uno de sus miembros

Si en cambio, se declara dentro de un miembro, solo será hallable dentro del mismo.

Finalmente, si se declara dentro de un bloque de ejecución, por ejemplo, en el interior de un bucle de repetición, o una sentencia condicional, sólo será alcanzable dentro de éste, ni siquiera en el resto del miembro.

VB
Public Class Variables
    Private DeLaClase As Integer = 0
    Private Function EstoEsUnaFunción() As String
        Dim DeLaFunción As Integer = 0
        If condición Then
            Dim DelBloque As Integer = 0
        End If
        'Aqui no se ve la variable DelBloque
    End Function
    ' Aquí no se ven ni DelBloque ni DeLaFunción
End Class
    public class Variables
    {
        int DeLaClase = 0;
        string EstoEsUnaFunción()
        {
            int DeLaFunción = 0;
            if (condición)
            {
                int DelBloque = 0;
            }
            //Aqui no se ve la variable DelBloque
        }
        // Aquí no se ven ni DelBloque ni DeLaFunción
    }

Las variables genéricas

Antiguamente, los lenguajes de programación se dividían entre:

los que exigían tipificación de variables como COBOL, C, C++.

Los que no exigían declaración aunque permitían al programador establecer la obligatoriedad, la familia de los Basic: BASIC, BASICA, GWBASIC, Quick Basic, Visual Basic.

Los que no tipificaban las variables como la familia de los xBase, como dBase, Fox, Clipper, Visual Fox.

Cuando surge .Net, se establece la obligatoriedad de tipificar las variables en todos los casos.

Sin embargo, bajo ciertas situaciones, la tipificación estricta puede conllevar imposibilidades programáticas. Desde la aparición de la versión 3 del .net Framework, es factible declara variables no tipificadas, pero que el compilador haga lo necesario para que el código siga siendo estricto.

En C#, por ejemplo, aparece la palabra reservada var, para indicar la declaración de una variable sin tipificar.

            var a = 1;

En Visual Basic, la ya existente sentencia Dim hace las veces de “comodín” declarativo.

Dim a = 1

 

Sin embargo, ten en cuenta que cuando se compila, estas declaraciones “genéricas” se traducen al tipo que el compilador estima debe corresponder.

En General funciona… pero no siempre.

Autenticación Azure y MVC


Donde explico como desarrollar e implementar MVC con autenticación en Dominio Azure.

Parte I. Creando el sitio Web

En Visual Studio 2013, hay asistentes que permiten integrar rápida y fácilmente los mecanismos de identificación centralizada provistos por Windows Azure y tus propias aplicaciones MVC.

Para comenzar es útil tener un dominio en una suscripción de Azure. (Obviamente, primero tener una suscripción… :). Hay de prueba, antes que te preocupes.Pero debes planificarlo bien, ya que duran poco http://azure.microsoft.com/es-es/pricing/free-trial/ ).

Entrando al administrador de la suscripción (https://manage.windowsazure.com), en la barra de opciones a la izquierda, selecciona Directorio Activo. Azure Active Directory
Allí podrás agregar un directorio que te permita administrar seguridad.

Al crear un proyecto nuevo, y seleccionar que el mismo será Web, existe la opción de cambiar la forma de identificación (Autenticación) de los usuarios.

Nuevo MVC con Autenticación Azure

Nota: lamentablemente, en ediciones anteriores de VS, era posible hacer esto DESPUÉS de haber comenzado el proyecto. En VS 2013, esa opción no aparece. 😦

Al cambiar la autenticación, permite seleccionar Autenticación de una organización, e indicar el dominio (el que creamos previamente)

Autenticación Organizacional

Esto deja elementos de configuración en el web.config de la aplicación, que configuran la relación entre el directorio de Azure y tu aplicación.

Además, agrega al proyecto, las clases necesarias para configurar dicha relación, establecer los objetos necesarios en la base de datos predeterminada del proyecto y controlar la adecuada identificación en cada parte del sitio (manejable por atributos) .

Por otra parte, establece configuraciones en Azure, que permiten la interrelación entre tu proyecto y el dominio de autenticación, como podemos ver en la imagen 3

App Web en Directorio Azure

Entre dichas configuraciones, quiero remarcar que la url de re direccionamiento post identificación, apunta a tu propio sitio como http://localhost:[puerto] para permitirte hacer todas las pruebas necesarias.

Pasar a producción

Cuando publicamos nuestro desarrollo a un sitio web Azure, el propio proceso de publicación también nos permite relacionar el sitio publicado con nuestro mecanismo de autenticación, por una casilla de selección específica.

App Web Publicación

Sin embargo, el sitio falla ya que intenta redirigir a “localhost” :).

Si investigamos un poco, vemos que se crean entradas para cada aplicación, bajo el “dominio”, y en este caso, hay dos, una para la versión local, y otra para la publicada.

App Web Publicada

Lo que necesitamos es… cambiar el archivo de configuración.

Mantener el orden.

Lo ideal es, siempre, tratar de automatizar estos cambios, de modo de no tener que “recordarlo” cada vez.

Dado que al publicar, se procesa el proyecto en modo “release”, aprovecharemos esa circunstancia para que automáticamente se modifique el archivo de configuración para ello.

En el web.config original, estas entradas definen la autenticación con Azure.

    <add 
      key="ida:FederationMetadataLocation" 
      value="https://login.windows.net/xyz.onmicrosoft.com/../FederationMetadata.xml" />
    <add 
      key="ida:Realm" 
      value="https://UniversidadNet.onmicrosoft.com/UniversidadNet" />
    <add 
      key="ida:AudienceUri" 
      value="https://UniversidadNet.onmicrosoft.com/UniversidadNet" />
    <add 
      key="ida:ClientID" 
      value="z1y3x6ey-y891-991a-a316-36631836x1yx" />
    <add 
      key="ida:Password" 
      value="aA\A1YA8VN5AY80PAqvvcA\l868Yieoz\vfVsFHAs\U=" />

Entonces, editando el archivo web.release.config, podemos hacer que las mismas cambien por los valores correspondientes para la versión “publicada”.

En el Explorador de Soluciones, hacemos clic en el botón “ver todos los archivos”, VS Ver Todos los archivos   veremos que hay 2 archivos que extienden el web.config, entre ellos, el web.release.config que necesitamos editar.

App Web Configs

Si vamos a la suscripción Azure, específicamente a la aplicación recién generada dentro del Directorio, podremos obtener los valores para el sitio público, en la opción de configuración.

Por cierto, vas a tener que generarte una clave para poder copiarla, ya que la autogenerada queda oculta.

Con esos datos, agregamos entradas en el web.release.config, agregándole los modificadores

xdt:Transform="SetAttributes" xdt:Locator="Match(name)"

para que reemplacen esos valores en la compilación para publicación (release),  de la siguiente forma:

    <add
      key="ida:FederationMetadataLocation"
      value="https://login.windows.net/xyz.onmicrosoft.com/../FederationMetadata.xml"
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"
      />
    <add
      key="ida:ClientID"
      value="NUEVOIDy-y891-991a-a316-36631836x1yx"
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"
    />
    <add
      key="ida:Password"
      value="aA_A1YA8VN5AY80PAqvvcA_l868Yieoz_vfVsFHAs_U="
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"
    />
  • ida:FederationMetadataLocation
  • ida:ClientID
  • ida:Password

Solo los tres valores mostrados son necesarios, colocándoles los atributos correspondientes a la aplicación de producción

Lo mismo valdrá para cualquier configuración que utilicemos (un ejemplo típico es la cadena de conexión a la base de datos, que aparece como ejemplo en el web.release.config).

Por cierto, Gise @0GiS0 ), está publicando otras cuestiones relacionadas con Aplicaciones en Azure, como por ejemplo, crear una máquina virtual para tu sitio Web, desde Visual Studio.  http://www.returngis.net/2014/04/integracion-de-visual-studio-con-microsoft-azure-virtual-machines/

Las herramientas


La idea es que podamos hacer y probar muchas y variadas cosas. Por ello, estuve buscando que herramientas tenemos disponibles que no impliquen costo alguno, de manera de facilitar la posibilidad de hacer pruebas y entrenar”.

Teniendo la posibilidad de hablar de muchas cosas, se me ocurre que lo mejor es tener una plataforma lo más completa posible.

El equipo

.

Idealmente, Windows 7. Windows Xp puede servir, pero hay muchas cosas que se te van a complicar.

Vamos a comenzar con cosas de código básico, pero tarde o temprano, usaremos datos. Así es que, un servidor de datos nos vendrá bien. Y de paso, hablaremos mucho de datos y demás.

Lo que usaremos

 

  1. SQL Server Express que podrás descargar de aquí http://www.microsoft.com/es-es/download/details.aspx?id=29062
  2. “Los” Visual Studio 2013 Express, que puede descargar aquí: http://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx

Seguro que usaremos:

  • Express 2013 for Web
  • Express 2013 for Windows Desktop

Y más adelante, seguramente:

  • Express 2013 for Windows

(Pero para este, necesitarás tener Windows 8)

Respecto de las instalaciones, es cosa de instalar. Solo te dejaré algunas recomendaciones

SQL Server 2012 Express

  1. Asegúrate de usar el SQLEXPRADV_x64_ESN (lo de ESN es porque es en español, pero tú verás)
  2. Considera instalar todas las opciones, incluyendo LocalDB, que algo haremos
    Opciones de SQL Express
  3. También, habilita el FileStream, a ver si surge alguna cosa que podamos aprender con él.

100-02_02 Filestream 

VS2013.

Instálalo, así como dice. 🙂 (otra no queda)