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.




