Mostrando las entradas con la etiqueta aspnet. Mostrar todas las entradas
Mostrando las entradas con la etiqueta aspnet. Mostrar todas las entradas

jueves, 23 de mayo de 2013

Llenar un combo con query y json con aspnet

3 comentarios:

1.) Agregar este codigo en el HTML


<Form>
 <select id="cboEjemplo">
  <option value="">Seleccione uno...</option>
 </select>
</Form>
            

2.) Agregar este jquery al final del documento.

 <script type="text/javascript">
        $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: "pagina.aspx/llenar",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    var datos = $.parseJSON(msg.d);

                    $(datos).each(function () {
                        var option = $(document.createElement('option'));

                        option.text(this.Nombre);
                        option.val(this.Codigo);

                        $("#cboEjemplo").append(option);
                    });
                },
                error: function (msg) {
                    $("#dvAlerta > span").text("Error al llenar el combo");
                }
            });
         });
</script>
            

3.) Agregar este codigo para crear en webmethod que generar el json basado en entity framework

[System.Web.Services.WebMethod]
    public static string llenar()
    {
        NorthwindEntities db = new NorthwindEntities();

        var query = from c in db.Categories
                    select new
                    {
                        Codigo = c.CategoryID,
                        Nombre = c.CategoryName
                    };

        return Newtonsoft.Json.JsonConvert.SerializeObject(query);
        
    }
            

Nota: no olvide descargar la libreria Newtonsoft para generar el json, es mas rapida que la nativa de Microsoft.

Ejemplo del HTML Completo.

<!DOCTYPE html>
<html>
  <head>
    <title>ejemplo</title>
  </head>
  <body>
    <h1>Hello, world!</h1>
    <Form>
 <select id="cboEjemplo">
  <option value="">Seleccione uno...</option>
 </select>
    </Form>
    <script src="js/jquery.js"></script>
    <script type="text/javascript"&gt
        $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: "pagina.aspx/llenar",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    var datos = $.parseJSON(msg.d);

                    $(datos).each(function () {
                        var option = $(document.createElement('option'));

                        option.text(this.Nombre);
                        option.val(this.Codigo);

                        $("#cboEjemplo").append(option);
                    });
                },
                error: function (msg) {
                    $("#dvAlerta > span").text("Error al llenar el combo");
                }
            });
         });
</script&gt
 
  </body&gt
</html>

Librerias necesarias:
Jquery

Newtonsoft

Agradecimientos a Luis Alberto por su ayuda. 
Ver

sábado, 3 de septiembre de 2011

WCF Service con Linq

1 comentario:
Windows Communication Foundation o WCF, (también conocido como Indigo) es la plataforma de .NET que nos permite el desarrollo de aplicaciones distribuidas,
Fue creado con el fin de permitir una programación rápida de sistemas distribuidos y el desarrollo de aplicaciones basadas en arquitecturas orientadas a servicios (también conocido como SOA),


Los wcf viene a reemplazar a los web service.
Comparación de los servicios web ASP.NET con el WCF basado en desarrollo


Ejemplo paso a paso.
1.) Crear el proyecto, para eso, File - new web site y mostrara la siguiente ventana, elija un nombre y precione OK.



2.) Agregar un Linq Classes, Add->New Item,  elija el  LinqToSql Classes,mostrara la siguiente ventana, agregue el nombre de Nortwind.dbml.



3.) Desde server Explorer Arrastren la tabla clientes:



4.) Creación de la interface, dirijase al ventana de Solution explorer y habra el archivo IService.cs


Abra el archivo y agregue el siguiente codigo dentro del dela  función
public interface IService Ejemplo:


[OperationContract]
List<customer>GetCustomersCountry(string Country);

5.) Implementación de la Internface, para eso abra el archivo Service.cs
Acerque el mouse a la clase y coloquelo sobre el sobre Class IService y cuando aparesca el icono en forma de hoja  precione clic en Implement interface 'IService1' Ejemplo:public class Service : IService
{




6.)  Ingresando codigo del Methodo, luego del paso 5 se habra agregado el siguiente codigo:


public List<customer> GetCustomersCountry(string Country){ 

NortwindDataContext db = new NortwindDataContext(); 
var query = from cust in db.Customers 
where cust.Country.StartsWith(Country) 
select cust; 
return query.ToList(); 
   
} 


Web Cliente - Para Utilizar el WCF

1.- Hacemos clic derecho en la Solución y agregamos un nuevo proyecto Web Asp.Net. 


File - new web site 



 
2.- Ahora añadimos un Service Reference a nuestra aplicación Web haciendo clic derecho a nuestro proyecto, luego debido a que nuestro cliente está en una misma Solución, descubrimos si existe algún servicio en la solución y la agregamos dando clic en OK, hagámoslo como se muestra a continuación:





3.- Añadiremos una pagina para utilizar la referencia.




4.- Agregaremos controles a la pagina








5.- Por ultimo el código para llamar al wcf
protected void Button1_Click(object sender, EventArgs e)
{ 
ServiceReference1.ServiceClient servicio = new ServiceReference1.ServiceClient(); 
var query = servicio.GetCustomersCountry(TextBox1.Text);
servicio.Close();
var query1 = from c in query 
select new 
{ 
c.CustomerID, 
c.CompanyName, 
c.Country, 
c.Phone, 
c.Fax 
}; 

GridView1.DataSource = query1; 
DataBind(); 
} 
Detalles de las características de WCF Nombre del Articulo Original: Using Linq To SQL With WCF Service
Ver

jueves, 1 de septiembre de 2011

Encriptar columna sql server con aspnet

Acá les proporciono un ejemplo de como crear una tabla de usuarios con el campo de Contraseña encriptado, luego veremos desde una pagina aspnet como podemos validar el usuario contra dicha tabla.

1.) Crear el master key

/* Crea la key master */
USE northwind
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'SQLAuthority'
GO

2.) Crear el certificado de encriptacion

/* Crea certificado de encriptacion */

CREATE CERTIFICATE EncryptTestCert
WITH SUBJECT = 'SQLAuthority'
GO

3.) Crea la  Symmetric Key

/* Crea Symmetric Key */
CREATE SYMMETRIC KEY TestTableKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION
BY CERTIFICATE EncryptTestCert
GO

4.) Crea la tabla

Create Table Usuarios
(
    IdUsuario    int identity(1,1) primary key,
    Usuario        varchar(50),
    Contrasena    VARBINARY(256)
)


5.) Crea store procedure de ingrear usuarios

create proc Ingresa_usuario
(
    @Usuario        varchar(50),
    @Contrasena        varchar(50)
)
as

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert

insert into usuarios(Usuario,Contrasena)
values(@Usuario, ENCRYPTBYKEY(KEY_GUID('TestTableKey'),@Contrasena))
        
        
        

5.1) Ingresando usuarios a través del store procedure

/* Ingresando usuarios con el store procedure */
exec Ingresa_usuario 'usuario1','password'
exec Ingresa_usuario 'usuario2','P@ssw0rd'

/* muestra la columna encriptada */
select * from usuarios     

        

/* verificando que las contraseñas estén correctamente almacenadas. */

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT Usuario,CONVERT(VARCHAR(50),DECRYPTBYKEY(Contrasena)) AS Contrasena
FROM usuarios
insert into usuarios(Usuario,Contrasena)

        


6.) Crear store procedure de validar usuarios


create proc Valida_usuario
(
    @Usuario        varchar(50),
    @Contrasena        varchar(50)
)
as

OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT count(*) as Contar
FROM usuarios
where Usuario=@Usuario
and CONVERT(VARCHAR(50),DECRYPTBYKEY(Contrasena))=@Contrasena
CLOSE SYMMETRIC KEY TestTableKey
  
Ahora en Visual Studio .net crearemos la pagina de validación


Creando pagina de login.


7.)  Agregue un pagina con el nombre de Login.aspx (clic en el menu web site new ítem)






8.) En la pagina agregue un control de login a la pagina desde el toolbox.






8.1) Su pagina se mirara así:






8.2) Capture el evento Authenticate del control login1 y agregue el código de autenticación (precione doble clic sobre el control para generar el evento) este evento tendrá el código de autenticar.


protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{ 

}


Validando con Linq to SQL Classes 

9) Agregue un contexto  haciendo click derecho sobre su proyecto, luego presioné "add item" y luego busque Linq to SQL Classes, agregue un nombre y luego add.






10) Habra su contexto y desde el server explorer arrastre los store procederes realizados en los pasos anteriores( paso 6 y 5), esto crea automáticamente 2 funciones que hacen referencia a los store procedure.






11) Validando usuarios en el evento Authenticate del paso 8.2:


protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    { 
        DataClassesDataContext db = new DataClassesDataContext();

        var query = db.Valida_usuario(Login1.UserName, Login1.Password).Single(); 

        if (query.contar > 0)
        { 
            //password correcto 
            System.Web.Security.FormsAuthentication.SetAuthCookie(Login1.UserName, false);
            Response.Redirect("Default.aspx"); 
        } 
        else 
        { 
            //password incorrecto 
            Login1.FailureText = "Usuario o password incorrecto"; 
        } 

    }


12.) Creando usuarios ( pendiente de terminar)
Ver

sábado, 27 de agosto de 2011

Cache con linq aspnet

No hay comentarios.:
El objeto Cache puede servir para optimizar una Aplicacion Web, antes de desplegar información.

Esto puede funcionar para información de no cambia continuamente, ejemplo:




Código:

nortwindDataContext nw = new nortwindDataContext();
        object cacheObj = Cache["consulta"];
        var query = cacheObj as List;       
        if (cacheObj == null)
        {
            query = (from c in nw.Customers
                        select c).ToList();
            Cache.Insert("consulta", query, null, System.Web.Caching.Cache.NoAbsoluteExpiration,
                TimeSpan.FromHours(4));
        }
        GridView1.DataSource = query;
        DataBind();

Ver

viernes, 22 de julio de 2011

Debug en Aspnet

No hay comentarios.:
ASP.NET es la principal tecnología que se usa para desarrollar aplicaciones web en Visual Studio. El depurador de Visual Studio proporciona herramientas muy eficaces para depurar aplicaciones web ASP.NET localmente o en un servidor remoto.

Antes de iniciar debe hacer referencia al name space:


using System.Diagnostics;

Escribir Debug en codigo

        int i = 10;
        //Vacía el búfer de resultados y hace que los datos almacenados en el búfer se escriban .
        Debug.AutoFlush =true;
        Debug.Indent(); //Aumenta en uno el valor actual de la propiedad IndentLevel.
        Debug.WriteLine("Iniciando Debug");
        Debug.WriteLine("Valor de variable: ");
        Debug.Write(i); // Escribe el valor del método ToString
        Debug.Unindent();  //Disminuye en uno el valor actual de la propiedad IndentLevel.
        Debug.WriteIf(i < 20, "Si esta i");     //Escribe un mensaje en los agentes de escucha de seguimiento de la colección de Listeners si una condición es true.
        

Leer Debug 
Para ver el resultado de dicho debug debera revisar la ventana de output.


Menu:
Debug, windows, Output

Nota:
El resultado lo pude ver en tiempo de ejecucion colocando un break point en la linea que debea analizar.

Mas informacion:
http://msdn.microsoft.com/es-ar/library/system.diagnostics.debug.aspx
Ver

Tracing en ASP.NET Page

No hay comentarios.:
Habilitar Tracing
 
1.) En la pagina puede agregar:

<%@ Page Trace="true" %>
 
Opcionalmente se puede agregar: TraceMode 
<%@ Page Language="VB" Trace="True" TraceMode="SortByCategory" %> 

2.) Programaticamente con la linea:

 Trace.IsEnabled = true;

3.) Para un site tiene que editar el archivo   Web.config

< configuration >
  < system.web >
    < trace enabled="true" pageOutput="false" requestLimit="40" localOnly="false"/ >
  < /system.web >
< /configuration >
 
Escribir Tracing

Trace.Warn("Categoria", "Mensaje de pantalla", ae)
Trace.Write("Categoria", "Mensaje de pantalla", ioe) 

Leer Tracing

Para leer el tracing debe entrar a la pagina Trace.axd  en su sitio:

http://localhost/SampleApplication/trace.axd

Tabla configuracion:

enabled  
true para habilitar el seguimiento para a aplicación; de lo contrario, false. El valor predeterminado es false. Puede reemplazar esta configuración para las páginas individuales estableciendo el atributo Trace en la directiva @ Page de esas páginas en true o false.

pageOutput 
true para mostrar el seguimiento tanto en páginas como en el visor de seguimiento (Trace.axd); de lo contrario, false. El valor predeterminado es false.
NoteNota

Las páginas individuales con el seguimiento habilitado no se ven afectadas por esta configuración.

RequestLimit

Número de solicitudes de seguimiento que se almacenan en el servidor. El valor predeterminado es 10.

traceMode
   

Orden en que se muestra la información de seguimiento. Establezca en SortByTime para ordenar en el orden en el que se procesó la información. Establezca en SortByCategory para ordenar alfabéticamente por categorías definidas por el usuario. El valor predeterminado es SortByTime.

localOnly
   

true para hacer que el visor de seguimiento (Trace.axd) esté disponible sólo para el servidor Web de host; de lo contrario, false. El valor predeterminado es true.

mostRecent

   
true para mostrar la información de seguimiento más reciente como resultado del seguimiento; de lo contrario, false, que indica que una vez superado el valor requestLimit, no se almacenan nuevas solicitudes. El valor predeterminado es false.
Ver

viernes, 10 de junio de 2011

ejemplo de ASP.NET Membership

No hay comentarios.:
Opciones para alojar Membership




Aplicando Membership-Related aun base de datos existente.

Navegue en la siguiente ruta:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

Ejecute
 aspnet_regsql.exe

El siguiente wizard se mostrara

1.) Elija configure sql server for application service



2.) Luego elija la base de datos donde pondrá las tablas de configuración. 




3.) Ahora tenemos que crear la base de datos tablas, vistas, store procedure.

     Abra Microsoft Managent studio y  ejecute el script : InstallCommon.sql 
     Ruta: C:\Windows\Microsoft.NET\Framework\v4.0.30319

Se creara la siguiente base datos.



4.) 

< configuration >
  < connectionStrings >
     < add name="MyDB" connectionString="..." / >
  < /connectionStrings >
  < system.web >
   

    < roleManager enabled="true"
                 defaultProvider="CustomizedRoleProvider" >
      < providers >
         < add name="CustomizedRoleProvider"
              type="System.Web.Security.SqlRoleProvider"
              connectionStringName="MyDB" / >
      < /providers >
    < /roleManager >

    < membership defaultProvider="CustomizedMembershipProvider" >
      < providers >
         < add name="CustomizedMembershipProvider"
              type="System.Web.Security.SqlMembershipProvider"
              connectionStringName="MyDB" / >
      < /providers >
    < /membership >

  < /system.web >
< /configuration >



Ver

viernes, 3 de junio de 2011

Autenticación en aspnet

3 comentarios:
Ejercicio de como crear una autenticación basica con formularios.

1.) Lo primero que tenemos que hacer es modificar el archivo web config, para quede de la siguiente manera.

1.1) En el tag de 
<system.web> cambie el  elemento autenticación  <authentication mode="Forms">


<authentication mode="Forms">
<forms loginUrl="login.aspx" timeout="2880"/>
 </authentication >


El elemento forms es el que define el comportamiento de nuestro sistema de autenticación. Los atributos de este elemento son los siguientes:
  • name. El nombre de la cookie del navegador que almacena el ticket de acceso. Si no se especifica uno se llamará ASPXAUTH. Por temas de seguridad usaremos un nombre distinto del por defecto.
  • loginUrl. La pagina a la que se enviará a los usuarios no logados de modo automático. Si no se especifica ninguna, se nos enviará a la página login.aspx situada en el directorio raíz de la aplicación Web.
  • timeout. Minutos en los que la cookie tiene validez. Por defecto es de 30 minutos.
  • protection. Especifica la forma en la que se protegen los datos de la cookie. Los valores son All, None, Encryption y Validation, siendo All el valor por defecto. Conviene indicar que, a menos que se indique lo contrario, las cookies se encriptan usando los algoritmos DES o TripleDES, dependiendo del servidor.
1.2)  Configurando el directorio privado.


Ya tenemos configurado el entorno de autenticación. Ahora toca configurar nuestro sitio como privado para que evitar accesos no deseados.
En primer lugar hemos de modificar el archivo web.config. En este archivo hemos de configurar el elemento authorization.


<xml version="1.0" encoding="utf-8" ?>
 <
configuration>
  <
system.web>
   <
authorization>
    <
deny users="?" />
<
allow users="*" />
   </
authorization>
  </
system.web>
 </
configuration>
Dentro de la sección authorization podemos tener los siguientes elementos
  • allow para permitir el acceso a los usuarios.
  • deny para denegar usuarios.
En ambos elementos tenemos el atributo users donde podemos especificar
  • “?” para indicar todos los usuarios anónimos
  • “*” para indicar a todos los usuarios, tanto anónimos como autenticados.
  • Lista de usuarios separada por coma, para indicar a un grupo de usuarios a los que queramos dar o denegar acceso, según el elemento en el que se encuentre.
Con estos cambios ya no podran entrar sin autenticarse.

2.) Creando pagina de login.

       2.1) Agregue un pagina con el nombre de Login.aspx (clic en el menu web site new item)





     2.2) En la pagina agregue un control de login a la pagina.




    2.3) Su pagina se mirara así:



  2.4) Capture el evento Authenticate del control login1 y agregue el código de autenticacion.



Con esto tenemos la validación, podremos dar por terminado este punto, si quiere validarlo con Entity Framework, continue.


 3.) Validando con entity framework.
  
      3.1) Abra su SQL Server Management Studio y ejecute el siguiente codigo, el cual creara su nueva tabla de usuarios.





      3.1) Cree o edite su modelo de entity Framerwok y agregue su tabla recientemente creada, para lograra esto editando su modelo precione clic derecho "Update model from database"



      3.1) Por ultimo cambiaremos el codigo de nuestra pagina de login para que valide con la tabla de la base de datos.

Ver

jueves, 9 de diciembre de 2010

Generadores de código

No hay comentarios.:


Creo que es sueño de todo desarrollador  y como piensa todas las demás personas que como programamos, en el mercado han existido algunas alternativas, un ejemplo es Iron Speed  que construye aplicaciones web rápidamente con reportes, seguridad, menús  y quedan muy bonitas,  ahora Microsoft ha visto un mercado ya que tiene una beta de su producto lightswitch el cual ayudara a desarrollar mucho más rápido.

En lo personal considero que los generadores debemos verlos con buena cara ya que actualmente nuestros software son Ferraris (fabricante de automóviles superdeportivos) ya que hacemos cada parte del software manualmente, pero debemos pensar en hacer toyotas con una línea de producción sin tantos detalles algo genérico y que funcione, bajando así nuestros costos de fabricación.



Ver

martes, 30 de noviembre de 2010

¿Es Silverlight el futuro de la programación web?

2 comentarios:
Microsoft nos ha dado muchas más opciones de programación últimamente, ahora ya no es simplemente web o Windows, yo creía que el futuro web era Silverlight, ya que   encapsula todas las características interactivas que AJAX, jQuery  ofrecen y mucho más. Lo mejor de todo, las es que las aplicaciones de Silverlight ejecutan en la misma manera, independientemente de la plataforma o navegador. Sin embargo, reciente mente vi un artículo con el título “Microsoft ha visto la luz. Y no es de Silverlight.”

Vinculo Original
En Resumen básicamente dicen que:
Hace casi un año, Microsoft sacó hizo el  lanzamiento. Lo más destacado de la presentación fue un demo mostrando algunas características ingeniosas nuevo Bing Maps. El problema? Todas estas cosas requieren de Microsoft Silverlight plug-in para trabajar. Me recriminó a la compañía por una vez más empujando los usuarios hacia una red más propiedad. Así que hoy es el momento para alabar, ya que parecen estar alejándose de esa estrategia. 


Bob Muglia, vicepresidente senior de Microsoft: Silverlight es nuestra plataforma de desarrollo para Windows Phone", dijo. Y si bien dijo que la tecnología tiene algunos "puntos clave" para aplicaciones de medios de comunicación (presumiblemente como Netflix, que utiliza Silverlight en la web), su papel como vehículo para la entrega de un runtime multiplataforma parece haber terminado. "Nuestra estrategia ha cambiado," 


En cambio, como dejaron claro durante el PDC, Microsoft está poniendo su peso detrás de HTML5 en el futuro. Aleluya.
"HTML es la única verdadera solución de plataforma cruzada para todo, incluyendo (de Apple) Plataforma de IOS," dijo Muglia Foley.
Silverlight ahora se conoce principalmente como plataforma de desarrollo para Windows Phone en el futuro. En otras palabras, la manera de hacer que las aplicaciones nativas de los dispositivos. Pero para casi todo lo demás, será HTML5. Y eso es una gran noticia para todos los usuarios finales. Es uno menos plug-in para descargar. Y es otro paso hacia una red unificada.

Al parecer Html 5 es futuro sin embargo en la página de Silverlight Questions desmiente esto: 

Durante la última semana ha habido mucha confusión y preocupación acerca de Silverlight que se produjeron a partir de una entrevista en la conferencia PDC la semana pasada. Hace unos días Bob Muglia (Presidente de nuestra División de Servidores y Herramientas) registró una entrada de blog en el blog de Silverlight equipo que ayudó a aclarar lo que dijo en la entrevista que causó la controversia.
Silverlight es muy importante y estratégico para Microsoft.
Estamos trabajando duro en la próxima versión de Silverlight, y seguirá siendo multi-navegador y multi-plataforma, y se ejecutan en Windows y Mac.
Silverlight es una plataforma de desarrollo de aplicaciones básicas de Windows, y es la plataforma de desarrollo para Windows Phone.

Esto de ninguna manera debe interpretarse como Silverlight no ser importante. Todos sabemos la importancia de contar con las más ricas experiencias posibles para las plataformas clave y factores de forma, y el valor que los consumidores (tanto los usuarios finales y empresas) atribuyen a él. Esto no es sólo una afirmación verdadera para las plataformas de Microsoft -, pero, evidentemente, ha sido demostrado por muchos otros también (Apple es un ejemplo). Silverlight es una tecnología estratégica de Microsoft que permite a los desarrolladores a construir esos, y pensamos que nuestras inversiones y el enfoque (en particular en las tres áreas) nos proporciona una plataforma increíblemente atractiva y diferenciada para hacerlo. Vamos a compartir los detalles de algunas de las mejoras de Silverlight gran venir en el futuro pronto.

Espero que esto ayuda a proporcionar un poco de claridad - y disculpas de nuevo por la confusión y la angustia de la semana pasada,

Ahora que tenemos ambos puntos de vista, daré mi humilde opinión que no necesariamente comparten con migo, no creo que la respuesta sea ir corriendo ahora mismo a html 5, mvc es una buena alternativa pero no la comparto por el momento, actualmente siento que mvc es como regresar en el tiempo ya que su visualización es pobre, mi recomendación usen un hibrido, podemos tener lo mejor de ambos mundos, un ejemplo de tener ambos mundos es SharePoint 2010 o el mismo Hotmail que tiene una parte en aspx (desconozco si es aspnet o mvc) y la otra en Silverlight.
Ver

sábado, 16 de octubre de 2010

Llamar todos los reportes desde una aspx

No hay comentarios.:
HTML de la pagina:


Necesitaran esta clase:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Reporting.WebForms;
using System.Net;
using System.Security;
using System.Security.Principal ;

using System.Configuration;public partial class ReportViewerCredentials : IReportServerCredentials
{
private string _userName;
private string _password;
private string _domain;

public ReportViewerCredentials(string userName, string password, string domain)
{
_userName = userName;
_password = password;
_domain = domain;

}

public WindowsIdentity ImpersonationUser {
get {
return null;
}
}

public ICredentials NetworkCredentials {
get {

return new NetworkCredential(_userName, _password, _domain);
}
}

public bool GetFormsCredentials(out Cookie authCookie,
out string userName, out string password,
out string authority)
{
authCookie = null;
userName = _userName ;
password = _password ;
authority = _domain ;

// Not using form credentials
return false;
}
}

Código de la pagina, en el evento Load.


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string Reporte = "";
Reporte = Request.QueryString["Reporte"].ToString();
rvReportes.ServerReport.ReportServerUrl = new Uri(http://pc/ReportServer);
rvReportes.ServerReport.ReportPath = Reporte;

ReportParameter _param_1 = new ReportParameter("codigo", "123",false);
this.rvReportes.ShowCredentialPrompts = false;

this.rvReportes.ServerReport.ReportServerCredentials = new ReportViewerCredentials("Usuario", "Contraseña", "pc");

this.rvReportes.ServerReport.SetParameters(new ReportParameter[] { _param_1 });
this.rvReportes.ServerReport.Refresh();
}
}
Ver

domingo, 27 de junio de 2010

Extendiendo Linq

No hay comentarios.:
Voy iniciar el post haciendo el un ejemplo linq desde el principio y luego mostrare la parte extendida.

1.) Iniciar Visual Studio


2.) File - New web site - Agregar nombre al website

3.) Website – Add new element - LINQ SQL Clasess



Le preguntara si quiere pasar su nueva clase linq a la carpeta App_Code elija si.


4.) Abra su clase Nortwind.dbml y baje del server explorer de la base datos nortwind  las tablas:

      Category, Producs, Supliers




5.) Cree una clase con el nombre NortwindDataContext.cs, para lograrlo


Website – Add new element – Class

 
 
Nota:
El nombre NortwindDataContext es el mismo nombre que del contexto de linq Nortwind.dbml, le mostrar un error:
 


Este error es normal ya que ambos objetos tiene el mismo nombre,  pero la idea es basicamente esa ya que sera 1 solo objeto.
 
6.)Para que ambos sean un solo objeto tenemos que agregar la palabra partial, con esto logramos que aun que sea un clase separada realmente estoy dentro del contexto, aun los va salir un error ya que hay que quitar el constructor.


Ejemplo:

 
 
7.) Ahora procederemos a extender nuestro contexto:
 
Pueden notar que no hace falta instanciar el contexto esto es porque están adentro del él.
 
8.)  Como usarlo,tiene que crear la pagina:  Menu Website - add new  element
                                    
 
 
 
9.) Ahora a la pagina creada le agregaremos 2 griview y un textbox:
 
 
 
10.) Agregando codigo:
       Para gregar codigo solo precione click derecho sobre su pagina y view code:
 
Buento alli F5 listo.
Espero les sirva.
        
Ver

domingo, 20 de junio de 2010

Colecciones como Parametros en un Web Service

No hay comentarios.:
A continuación les muestro  cómo pasar una colección como un parámetro para el web Service

Creando la clase para la collección


public class Persona
{

public int Edad;
public string Nombre, Apellido;
public Persona() { }

     public Persona(string nombre, string apellido, int edad)
    {

          Edad= edad;
          Nombre= nombre;
          Apellido= apellido;

    }

}



Creando el web sevice  Web Method...

[WebMethod]

public void Guardar(Persona[] lista, int id)
{

List<Persona> gente= new List<Persona>(lista);

foreach (Persona i in gente)
{
       string N, A;
       int E;
       N =  i.Nombre;
       A = i.Apellido;
       R = i.Edad;
}

}

Consumir el web service.

localhost.Persona Juan= new localhost.Persona();
Juan.Nombre= "Juan";
Juan.Apellido= "Perez";
Juan.Edad= 32;

localhost.Person Juana= new localhost.Persona();
jane.Nombre= "Juan2";
jane.Apellido= "Perez2";
jane.Edad= 37;


//Crear un array

localhost.Persona[] gente= { Juan, Juana};

//Llamar el web service
localhost.Service1 s = new localhost.Service1();
s.Guardar(gente, 1);
Ver

domingo, 23 de mayo de 2010

LINQ Generic List con columnas especificas

No hay comentarios.:
Para poder ultilizar el resultado de un Query Linq se pueden utilizar las listas genericas Ejemplos:

public List < customer > GetCustomersCountry(string Country)
{
NortwindDataContext db = new NortwindDataContext();
var query = from cust in db.Customers
select cust;
return query.ToList();
}

public List< customer > GetCustomersCountry(string Country)
{
NortwindDataContext db = new NortwindDataContext();
List < customer > c = (from cust in db.Customers
select cust).ToList< customer >();
return c;
}

Sin embargo si no quieren enviar todas filas si no que algunas, se podria modifica facilmente asi:

public List< customer > GetCustomersCountry(string Country)
{
NortwindDataContext db = new NortwindDataContext();
var query = from cust in db.Customers
select new { cust.CustomerID,cust.CompanyName};
return query.ToList();
}

Pero este le dara el error:
Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.List'

Esto es por que Usted no debe devolver instancias anónimas.
No se pueden devolver los tipos anónimos.

Solución:
public IQueryable GetCustomersCountry()
{
NortwindDataContext db = new NortwindDataContext();
IQueryable I =
(
from c in db.Customers
orderby c.CompanyName
select new { CompanyName = c.CompanyName }
);
return I;
}
Ver

miércoles, 14 de abril de 2010

LINQ paralelo ( PLINQ ) para SQL server

No hay comentarios.:


Ejecución de consultas en procesadores multinúcleo con Linq




Lo primero es que no corre con el framework 3.5 tiene que trasladarse ya al 4.0

Los procesadores multinúcleo ya están aquí. Los procesadores multinúcleo solo estaba disponibles para servidores y PCs de escritorio. Pero ahora, ya se están usando en teléfonos móviles y PDA, lo cual genera grandes ventajas en relación con el consumo de energía. En respuesta al aumento de disponibilidad de plataformas con procesadores multinúcleo, Parallel Language Integrated Query (PLINQ) ofrece una manera fácil de sacar partido del uso de hardware paralelo, incluidos equipos tradicionales con varios procesadores y la última ola de procesadores multinúcleo.

PLINQ es un motor de ejecución de consultas que acepta cualquier consulta LINQ to Objects o LINQ to XML y usa automáticamente varios procesadores o núcleos para su ejecución cuando estos están disponibles. El cambio en el modelo de programación es minúsculo, lo cual significa que no es necesario ser un gurú para usarlo.

Usar PLINQ es casi exactamente lo mismo que usar LINQ to Objects y LINQ to XML. Puede usar cualquiera de los operadores disponibles.


Ejemplos con conexión a base de datos.

Linq
var query = from c in db.Customers
where c.Country == "USA"
orderby c.CompanyName
select new { c.CustomerID, c.CompanyName };

plinq
var query = from c in db.Customers.AsParallel()
where c.Country == "USA"
orderby c.CompanyName
select new { c.CustomerID, c.CompanyName };


El genio Joe Duffy es el responsable de desarrollo del equipo Parallel FX de Microsoft y participa habitualmente en el blog www.bluebytesoftware.com/blog. Está escribiendo un libro, Concurrent Programming on Windows, que va a ser publicado por Addison-Wesley.

Articulo original
Ver

miércoles, 28 de octubre de 2009

Encriptar el Web.Config

1 comentario:
El verdadero titulo de este post deberia ser encriptar una sección del web config, pero estoy seguro que lo que quieren es ocultar el es el connectionString.
Vamos a utilizar el proveedor de configuración protegida
RSA y la herramienta aspnet_regiis.exe para poder lograr la encriptación de secciones del Web.Config.

Es posible importar y exportar las claves RSA de un servidor a otro, esto nos ayudará a utilizar el mismo cifrado en varios servidores.

Para encriptar la sección connectionString del Web.Config vamos a realizar los siguientes pasos:

1. Vamos a crear un sitio llamado EncriptacionRSA

2. Vamos a agregar el siguiente código en la sección connectionString dentro del archivo Web.Config

< connectionStrings >
< add name="MyLocalSQLServer"
connectionString="Initial Catalog=northwind;
data source=localhost;user id=sa;password=password"
providerName="System.Data.SqlClient"/ >
< /connectionStrings >


3. Ahora vamos a la línea de comandos para ejecutar la siguiente instrucción:

%WinDir%\Microsoft.NET\Framework\\aspnet_regiis -pe "connectionStrings" -app "/EncriptacionRSA"

El comando anterior, con el modificador -app, asume que hay un directorio virtual IIS llamado MachineRSA. Si está utilizando el servidor Web de Visual Studio .NET 2005 en lugar de IIS, utilizaremos el modificador -pef, que nos permitirá especificar la ubicación física del directorio del Web.Config

%WinDir%\Microsoft.NET\Framework\\aspnet_regiis.exe -pef "connectionStrings" C:\Projects\EncriptacionRSA

Si el comando es ejecutado de forma correcta deberemos de obtener el siguiente resultado:

Encrypting configuration section...
Succeeded!

Las claves RSA se almacenan en la siguiente ruta:

\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys

Una vez que ejecutamos esto, en el archivo Web.Config tendremos el siguiente resultado:

< connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider" > < EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#" >
< EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" / >
< KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#" >
< EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#" >
< EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" / >
< KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#" >
< KeyName >Rsa Key< /KeyName >
< /KeyInfo >
< CipherData >

< CipherValue>R7cyuRk+SXJoimz7wlOpJr/YLeADGnwJVcmElHbrG/B5dDTE4C9
rzSmmTsbJ9Xcl2oDQt1qYma9L7pzQsQQYqLrkajqJ4i6ZQH1cmiot8ja7Vh+yItes7TRU
1AoXN9T0mbX5H1Axm0O3X/285/MdXXTUlPkDMAZXmzNVeEJHSCE=
< /CipherValue >
< /CipherData >
< /EncryptedKey >
< /KeyInfo >
< CipherData >

< CipherValue>d2++QtjcVwIkJLsye+dNJbCveORxeWiVSJIbcQQqAFofhay1wMci8FFlb
QWttiRYFcvxrmVfNSxoZV8GjfPtppiodhOzQZ+0/QIFiU9Cifqh/T/7JyFkFSn13bTKjbYmHObKA
zZ+Eg6gCXBxsVErzH9GRphlsz5ru1BytFYxo/lUGRvZfpLHLYWRuFyLXnxNoAGfL1mpQM7M46x5Y
WRMsNsNEKTo/PU9/Jvnh/lT+GlcgCs2JRpyzSfKE7zSJH+TpIRtd86PwQ5HG3Pd2frYdYw0rmlml
I9D
< /CipherValue >
< /CipherData >
< /EncryptedData >
< /connectionStrings >

Ahora vamos a comprobar si el encriptación y desencriptación funciona correctamente, para esto vamos a nuestra página Default.aspx y vamos a agregar el siguiente código de la sección HTML

< %@ Page Language="C#" % >
< script runat="server" >
protected void Page_Load(object sender, EventArgs e) {
Response.Write("Clear text connection string is: " + ConfigurationManager.ConnectionStrings
["MyLocalSQLServer"].ConnectionString);
}
< /script >

< html >
< body/ >
< /html >

MyLocalSQLServer es la cadena de conexión que especificamos en el Web.Config

Por último para regresar la sección del configurationString a su estado original vamos a ocupar el siguiente comando:

%WinDir%\Microsoft.NET\Framework\\aspnet_regiis -pd "connectionStrings" -app "/EncriptacionRSA"

y para si ocupamos una ruta física ocupamos el siguiente comando:
%WinDir%\Microsoft.NET\Framework\\aspnet_regiis -pdf "connectionStrings" C:\Projects\EncriptacionRSA

Si el comando funciona correctamente obtendremos el siguiente resultado:

Decrypting configuration section...
Succeeded!
Ver