none
Timeout cuando llamo a un callback desde un servicio RRS feed

  • Pregunta

  • Hola a todos,

    resulta que tengo un servicio simple, estoy intentando aprender la tecnología, y hago lo siguiente.

    Esta es mi interfaz.

    <ServiceContract(CallbackContract:=GetType(IMiRetrollamada))>
    Public Interface IRetrollamada
        <OperationContract()>
        Sub Añadir()
    End Interface
    
    'No hace falta poner el ServiceContract
    Public Interface IMiRetrollamada
        <OperationContract(IsOneWay:=True)>
        Sub MostrarResultado()
    End Interface

    Y aqui la implementacion de la misma:

    Public Class Retrollamada
        Implements IRetrollamada
    
        Shared al As New List(Of IMiRetrollamada)
    
        Public Sub Añadir() Implements IRetrollamada.Añadir
            Try
                Dim callback As IMiRetrollamada = OperationContext.Current.GetCallbackChannel(Of IMiRetrollamada)()
    
                callback.MostrarResultado()
            Catch ex As Exception
    
            End Try
        End Sub
    End Class


    Y este el Host donde alojo el servicio:

        Sub Main()
            Dim svcHost2 As New ServiceHost(GetType(Retrollamada), New Uri("http://localhost:8001/Retrollamada"))
            Try
                
                Dim smb2 As ServiceMetadataBehavior = svcHost2.Description.Behaviors.Find(Of ServiceMetadataBehavior)()
    
                If (smb2 Is Nothing) Then
                    smb2 = New ServiceMetadataBehavior()
                End If
    
                smb2.HttpGetEnabled = True
                smb2.MetadataExporter.PolicyVersion = PolicyVersion.Policy15
                svcHost2.Description.Behaviors.Add(smb2)
    
                svcHost2.AddServiceEndpoint( _
                      ServiceMetadataBehavior.MexContractName, _
                      MetadataExchangeBindings.CreateMexHttpBinding(), _
                      "mex")
             svcHost2.AddServiceEndpoint(GetType(IRetrollamada), New WSDualHttpBinding(), "")
    
                svcHost2.Open()
                Console.WriteLine("The service is ready.")
                Console.WriteLine("Press <ENTER> to terminate service.")
                Console.WriteLine()
                Console.ReadLine()
    
                
                svcHost2.Close()
            Catch ex As Exception
                Console.WriteLine("ERROR: " & ex.Message)
                Console.ReadLine()
            End Try
        End Sub

    Despues desde el cliente al clicar un boton, lo siguiente:

    Dim miCallback As New RetrollamadaCallback
    Dim instancia As New InstanceContext(miCallback)
    Dim proxi As New RetrollamadaClient(instancia)
    
    proxi.Añadir()

    El problema es que cuando indico que se llame la operacion MostrarResultado en el metodo Añadir del servicio, me da un TimeOut y sin el funciona correctamente. El metodo MostrarResultado esta implementado pero tiene el cuerpo del metodo vacío.

    Estoy utilizando WSDualHttpBinding, estoy decorando el metodo MostrarResultado, que es el callback, con IsOneWay:=True. Estoy un poco descolocado la verdad.

    Gracias de antemano por vuestro tiempo.

    Un saludo.

    domingo, 22 de julio de 2012 9:49

Todas las respuestas

  • si pones un breakpoint en la implementacion del servidor puedes asegurar que la invocacion se haya realizado sin problemas ?

    aconsejaria que host y cliente los ejecutes desde VS diferentes asi puedes iniciarlos y depurarlos por separado y ver como se realiza las llamadas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 22 de julio de 2012 22:13
  • Hola Leandro,

    depurandolo veía como se llamaba  todo correctamente, pero es como si uno se quedara esperando por el otro. Finalmente revisando un ejemplo en la web lo rehice y funciono, desconozco donde estaría el fallo la verdad.

    http://www.danrigsby.com/blog/index.php/2008/03/26/async-operations-in-wcf-iasyncresult-model-server-side/

    Gracias.

    • Editado danielovik lunes, 23 de julio de 2012 14:37
    lunes, 23 de julio de 2012 14:36