Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CARRERA DE SISTEMAS E INFORMATICA TALLER DE CERTIFICACION DE VISUAL STUDIO 2010 Profesor del Curso I. OBJETIVO : Raul Solis Mendiola
Seleccionaremos la opcin que nos agrega un proyecto Web a nuestra solucin la cual utilizaremos para hospedar nuestra aplicacin de Silverlight como se muestra en la siguiente imagen:
Despus de esto agregaremos otro proyecto a nuestra solucin de librera de clases con el nombre de ClassLibrary1 en el cual agregaremos dos archivos de cdigo, el primero con el nombre de Categoria.vb y el segundo con el nombre de CategoriaDAL.vb el cual ser nuestra capa de acceso a datos, definiremos nuestra clase dentro del archivo Categoria.vb con tres propiedades; IDCategoria, Nombre y Descripcion como se muestra a continuacin:
01 Public Class Categoria 02 03 04 05 06 07 08 09 10 11 12 13 Private intIDCategoria As Integer Private strNombre As String Private strDescripcion As String
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
End Property
35 End Class
En nuestra clase CategoriaDAL agregaremos una funcin con el nombre de ObtenerListaCategorias() que nos retornara una lista de tipo Categoria la cual har una consulta a nuestra base de datos Northwind a nuestra tabla Categories y regresara una lista de objetos de la clase Categora. Para ejecutar esta consulta crearemos una instancia de nuestra clase SqlConnection la cual le pasaremos como parmetro al inicializar la clase nuestra cadena de conexin, para tener un poco mas de informacin sobre cadenas de conexin ir aqu. Crearemos un objeto de la clase SqlCommand Class el cual ejecutara nuestra consulta de SQL y crearemos un objeto de la clase SqlDataReader Class que ser el lector de datos que usaremos para barrer el resultado de nuestra consulta la cual asignaremos cada campo a la propiedad de la clase correspondiente y retornaremos la lista de objetos de la clase Categoria como se muestra a continuacin:
01 Imports System.Data 02 Imports System.Data.SqlClient 03 05 06 07 08 09 04 Public Class CategoriaDAL Public [Error] As String Public Function ObtenerListaCategorias() As List(Of Categoria)
Info=True;User ID=user;Password=pass123") Dim cmdSQLComando As New SqlCommand("select CategoryID, 10 CategoryName, Description from Categories order by CategoryID", conSQLConnexion) 11 12 13 14 15 16 17 18 19 cmdSQLComando.CommandTimeout = 2000 cmdSQLComando.CommandType = Data.CommandType.Text Dim ldSQLLectorDatos As SqlDataReader Dim lsListaCategorias As New List(Of Categoria) Try conSQLConnexion.Open()
End Function
35 End Class
Nota: Es necesario agregar las referencias a nuestros ensamblados System.Data y System.Data.SqlClient en nuestro proyecto de librera de clases (ClassLibrary1). Despus de esto agregaremos otro proyecto a la solucin de tipo WCF Service tecnologa la cual pertenece a nuestro NET Framework que nos proporciona un modelo de programacin unificado para la creacin de aplicaciones orientadas a servicios, a este proyecto le asignaremos el nombre de WCFServices1 en el cual agregaremos un nuevo servicio WCF con el nombre de CategoriaServicio.svc. Al crear nuestro proyecto de servicios WCF hay que definir un contrato, pero que es esto?, un contrato especifica que operaciones se admiten en el servicio, los contratos se crean mediante la definicin de una interfaz de servicio, es decir nuestro contrato se establece entre nuestro servicio y nuestra interfaz en la cual definiremos nuestras funciones las cuales debern de estar especificadas en ambas partes.
Despus de esta explicacin es necesario agregar a nuestro proyecto WCFServices1 la referencia a nuestro proyecto ClassLibrary1, esto dando clic sobre nuestro proyecto WCFServices1 en la opcin de agregar referencia.
Agregaremos la misma funcin que en nuestra ClaseDAL con el nombre de ObtenerListaCategorias() en nuestra interfaz:
01 Imports System.ServiceModel 02 Imports ClassLibrary1 03 04 <ServiceContract()> 06 07 08 09
10 End Interface
En nuestro servicio crearemos nuestra funcin que implemente de nuestra interfaz y crearemos dentro una instancia de nuestra clase CategoriaDAL y ejecutaremos nuestra funcin:
01 Imports ClassLibrary1 02 03 Public Class CategoriaServicio 04 Implements ICategoriaServicio
05 06 07 08 09 10
Function ObtenerListaCategorias() As List(Of Categoria) Implements ICategoriaServicio.ObtenerListaCategorias Dim cCategoriaDAL As New CategoriaDAL Return cCategoriaDAL.ObtenerListaCategorias()
End Function
11 End Class
Nota: Es necesario generar nuestro proyecto WCFService1 al llegar a este punto, dando clic derecho sobre el mismo en la opcin de Volver a generar. Agregaremos referencia en nuestro proyecto de Silverlight a nuestro servicio CategoriaServicio.svc dando clic derecho sobre el nombre de nuestro proyecto WCFServices1 en la opcin de Agregar referencia de servicio como se muestra en las siguiente imagen:
Hasta este momento los proyectos en nuestra solucin debern verse como en la siguiente imagen:
Agregaremos en nuestra pagina MainPage.xaml un DataGrid con el nombre de DgrCategorias y un Botn con el nombre de BtnCargarDatos e importaremos en nuestra clase MainPage dentro del archivo MainPage.xaml.vb la referencia a nuestro servicio y agregaremos tambien el evento BtnCargarDatos_Click del boton que agregamos previamente en nuestra pagina. Al momento de agregar la referencia a nuestro servicio se crea un archivo con el nombre de Reference.vb el cual contiene nuestras clases, funciones y eventos, dicho archivo no esta visible pero es posible verlo directamente desde la ruta donde tenemos nuestra solucin en el proyecto de Silverlight, esto se explicara en alguna entrada futura. Agregaremos el mtodo ObtenerListaCategorias() el cual mandaremos llamar desde el evento BtnCargarDatos_Click de nuestro botn y agregaremos tambin el evento ObtenerListaCategoriasCompleted() , este evento nos servir para obtener los datos retornados por nuestra funcin, en nuestro evento ObtenerListaCategorias() crearemos el cliente para ejecutar la funcin de nuestro servicio, como se muestra a continuacin:
1 Private Sub ObtenerListaCategorias() 2 Dim cscCategoriaServicioCliente As New CategoriaServicioClient AddHandler 3 cscCategoriaServicioCliente.ObtenerListaCategoriasCompleted, AddressOf ObtenerListaCategoriasCompleted 4 cscCategoriaServicioCliente.ObtenerListaCategoriasAsync()
En nuestro metodo ObtenerListaCategoriasCompleted() obtendremos el resultado de nuestra funcin ejecutada en el metodo ObtenerListaCategorias() este ser el patrn de uso que se vera cada vez que se tiene acceso a servicios con Silverlight, dicho resultado lo asignaremos como ItemSource de nuestro DataGrid:
Private Sub ObtenerListaCategoriasCompleted(ByVal sender As Object, ByVal e As ObtenerListaCategoriasCompletedEventArgs) 2 If e.Error Is Nothing Then 1 3 4 5 6 7 8 If e.Result IsNot Nothing Then Me.DgrCategorias.ItemsSource = e.Result End If
Else
9 End Sub
Hasta este momento si ejecutamos nuestro proyecto veremos que nos estar marcando el siguiente error: {System.ServiceModel.CommunicationException: Se ha producido un error al intentar realizar una solicitud al URI http://localhost:9228/CategoriaServicio.svc’. Puede deberse a un intento de acceso a un servicio de configuracin entre dominios sin una poltica entre dominios adecuada en contexto o una poltica no apropiada para servicios SOAP. Es posible que necesite ponerse en contacto con el propietario del servicio para publicar un archivo de poltica entre dominios y para asegurarse de que permite enviar encabezados HTTP relacionados con SOAP. Para solucionar este problema agregaremos un nuevo archivo XML a nuestro proyecto WCFService1 con el nombre de ClientAccessPolicy.xml el cual le agregaremos el siguiente esquema ya que por cuestiones de seguridad en Silverlight 4 es necesario especificar una poltica de acceso del cliente:
01 <?xml version="1.0" encoding="utf-8"?> 02 <access-policy> 03 04 05 06 07 08 09 10 11 12 <cross-domain-access> <policy>
13 </access-policy>
</policy> </cross-domain-access>
Despus de agregar el archivo ClientAccessPolicy.xml y ejecutar nuestro proyecto nuestro DataGrid deber de verse de la siguiente manera: