miércoles, 17 de octubre de 2012

Primera Aplicación usando WCF

Buenas Tardes, mi nombre es Edgar Flores y en este mi primer post realizaré una aplicación simple utilizando la tecnología que nos ofrece Microsoft apartir del framework 3.0 llamada WCF(Windows Communication Foundation), la cual está orientada a una arquitectura de servicios.

En primer lugar, definiremos nuestra clase, la cual será serializada a través del servicio.

Imports System.Runtime.Serialization

<DataContract()> _
Public Class Eval

Dim _id As String
Dim _Submitter As String
Dim _Comments As String
Dim _Datesubmitter As DateTime

<DataMember()> _
Public Property id() As String
Get
Return _id
End Get
Set(ByVal value As String)
_id
= value
End Set
End Property

<DataMember()> _
Public Property Submitter() As String
Get
Return _Submitter
End Get
Set(ByVal value As String)
_Submitter
= value
End Set
End Property

<DataMember()> _
Public Property Comments() As String
Get
Return _Comments
End Get
Set(ByVal value As String)
_Comments
= value
End Set
End Property

<DataMember()> _
Public Property Datesubmitter() As DateTime
Get
Return _Datesubmitter
End Get
Set(ByVal value As DateTime)
_Datesubmitter
= value
End Set
End Property

End Class

Como verán es una clase común y corriente, simplemente que se le ha agregado algunos atributos a las propiedades y a la clase, ¿Porqué?. Esto se debe a que a utilizar esta tecnología los datos van a tener que viajar serializados a través del servicio y para que este los reconozca deben tener siempre esos atributos, de lo contrario no se podrá acceder a sus valores. Además, algo muy importante para que estos atributos sean reconocidos son los Imports como verán ahí uso el ensamblado System.Runtime.Serialization

En segundo lugar, debemos de definir nuestra interface en la cual definiremos las operaciones a realizar.

Imports System.ServiceModel

<ServiceContract()> _
Public Interface IEvalService

<OperationContract()> _
Sub SubmitEval(ByVal obj As Eval)
<OperationContract()> _
Function GetAllEvals() As List(Of Eval)
<OperationContract()> _
Sub RemoveEval(ByVal id As String)

End Interface

En este caso no hay mucho que explicar, ya que al igual que la clase Eval requieren unos atributos en la cabecera de la clase y en los métodos, cabe recalcar que solo llevarán esos atributos los métodos que van a ser pasados a través del servicio.

En tercer lugar, nos queda implementar el servicio, en el cual desarrollaremos la lógica de los métodos.

Imports System.ServiceModel
<ServiceBehavior(InstanceContextMode:= _
InstanceContextMode.Single)
> _
Public Class EvalService
Implements IEvalService

Dim list As New List(Of Eval)

Public Function GetAllEvals() As _
System.Collections.Generic.List(
Of Eval) _
Implements IEvalService.GetAllEvals
Return list
End Function

Public Sub RemoveEval(ByVal id As String) _
Implements IEvalService.RemoveEval
list.Remove(list.Find(
Function(e) e.id.Equals(id)))
End Sub

Public Sub SubmitEval(ByVal obj As Eval) _
Implements IEvalService.SubmitEval
obj.id
= Guid.NewGuid().ToString
list.Add(obj)
End Sub

End Class

En este caso se agregó el Behavior al Servicio que vendría a ser el tag de como es que quieres que se comporte tu servicio en este ejemplo hemos usado el InstanceContextMode.Single, que significa que se mantendrá la misma instancia por cada invocación que se haga al servicio. Estos modos de contextos pueden ser tres Single, PerSession y PerCall . Para mayor información acerca de este tema ver el siguiente link Ver

Finalmente, una vez implementado todo lo anterior pasaremos a la prueba del servicio, ejecutamos el proyecto F5 y si el servicio esta ok aparecerá la siguiente pantalla.



En la primera imagen como vemos están todos los métodos que implementamos en el service lo que haremos ahora es darle click al método SubmitEval para poder probar el registro.



Como primer paso llenaremos los datos del objeto y presionaremos el botón invoke asegúrense de realizar más de un registro.



Como segundo y último paso seleccionaremos el método GetAllEvals y le damos invoke y verán que como resultado nos arroja la cantidad de registros que hemos insertado. En este punto hay algo muy importante que resaltar, ya que si no hubiéramos usado InstanceContextMode.Single en el servicio no hubiéramos podido obtener la cantidad de registros en el método GetAllEvals porque lo que nos dice la teoría acerca del Modo Single es que usa siempre la misma instancia para acceder al servicio y en este caso los datos agregados a la lista se van acumulando.

No hay comentarios:

Publicar un comentario