IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Remoting et événement


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 33
    Par défaut Remoting et événement
    Comment fait-on pour créer un événement qui puisse être intercepté coté client.

    J'ai fait des tests mais j'ai l'exection suivante :Le type System.DelegateSerializationHolder et les types qui en dérivent (tel que System.DelegateSerializationHolder) ne peuvent pas être désérialisés avec ce niveau de sécurité.

    Interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Public Interface IRemoteOperation
     
        Event Msg(ByVal Message As MessageEventArgs)
        Sub Start()
        Sub Arret()
     
    End Interface
     
    <Serializable()> Public Class MessageEventArgs
        Inherits MarshalByRefObject
     
        Private _Msg As String
        Public Sub New(ByVal as_Msg As String)
            _Msg = as_Msg
        End Sub
     
        Public ReadOnly Property Msg() As String
            Get
                Return _Msg
            End Get
        End Property
    End Class
    Clase sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Public Class RemoteOperation
        Inherits MarshalByRefObject
        Implements RemotingInterfaces.IRemoteOperation
     
        Private nombre As Integer = 0 ' sera incrément par Incrementation()
     
        ' Indique que l'objet aura une durée de vie illimitée
        Public Overrides Function InitializeLifetimeService() As Object
            Return Nothing
        End Function
     
        Public Sub Envoie(ByVal as_Message As String)
            Dim o As Object = as_Message
            RaiseEvent Msg(o)
        End Sub
     
        Dim aTimer As New System.Timers.Timer(2000)
     
        Public Sub Start() Implements RemotingInterfaces.IRemoteOperation.Start
     
            AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
            ' Only raise the event the first time Interval elapses.
            aTimer.AutoReset = False
            aTimer.Enabled = True
        End Sub
     
        Public Sub OnTimedEvent(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
            Envoie("Hello World!")
            'RaiseEvent Msg("Hello World!")
        End Sub
     
        Public Sub Arret() Implements RemotingInterfaces.IRemoteOperation.Arret
            aTimer.Enabled = False
        End Sub
     
        Public Event Msg(ByVal Message As RemotingInterfaces.MessageEventArgs) Implements RemotingInterfaces.IRemoteOperation.Msg
    End Class
    Code Coté client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
        Private Channel As System.Runtime.Remoting.Channels.tcp.TcpChannel 'New System.Runtime.Remoting.Channels.tcp.TcpChannel(0)
        Private serverProv As BinaryServerFormatterSinkProvider
        Private clientProv As BinaryClientFormatterSinkProvider
        Private props As IDictionary = New Hashtable
       Dim remoteOperation As RemotingInterfaces.IRemoteOperation  'Friend WithEvents
     
     
        Private Sub SetChannel()
            serverProv = New BinaryServerFormatterSinkProvider
            clientProv = New BinaryClientFormatterSinkProvider
            serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
            props("port") = 0
            'props("name") = privServiceName
            Channel = New TcpChannel(props, clientProv, serverProv)
        End Sub
     
        Private Sub Init()
            SetChannel()
            ChannelServices.RegisterChannel(Channel)
     
            Try
                remoteOperation = CType(Activator.GetObject(GetType(RemotingInterfaces.IRemoteOperation), "tcp://localhost:1069/RemoteOperatio"), RemotingInterfaces.IRemoteOperation) 'CType(Activator.GetObject(GetType(RemotingInterfaces.IRemoteOperation), "tcp://localhost:8000/EasyInvoke"), RemotingInterfaces.IRemoteOperation)
     
                If remoteOperation Is Nothing Then
                    MsgBox("Servidor no encontrado")
                End If
     
                ' Attach the event handler
                AddHandler remoteOperation.Msg, AddressOf remoteOperation_Msg
     
            Catch ex As Exception
                MsgBox(ex.Message)
     
            End Try
     
        End Sub
     
        Private Sub remoteOperation_Msg(ByVal Message As RemotingInterfaces.MessageEventArgs)
     
            MessageBox.Show(Message.Msg)
        End Sub

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 33
    Par défaut
    Ça inspire personne le remoting?

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par dieuzorro
    Ça inspire personne le remoting?
    Non moi je te conseillerais les Sockets en .NET ! Facile et simple d'utilisation.
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 33
    Par défaut
    Ben d'abitude j'utilise les sockets, je voulai voir ce que sa donne le remoting!

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par dieuzorro
    Ben d'abitude j'utilise les sockets, je voulai voir ce que sa donne le remoting!
    Tu as bien raison !
    J'ai trouvé ça, je ne sais pas ce que ça vaut, mais ça peut t'intéresser :
    http://www.codeproject.com/csharp/RemotingAndEvents.asp
    http://www.awprofessional.com/articl...?p=366699&rl=1
    http://www.c-sharpcorner.com/UploadF...teObjects.aspx
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 33
    Par défaut
    Bon ben j'en suis toujour au même point avec les événements en remoting. Sa doit ce faire avec les delegates mais j'ai toujours le message : Le type System.DelegateSerializationHolder et les types qui en dérivent (tel que System.DelegateSerializationHolder) ne peuvent pas être désérialisés avec ce niveau de sécurité.

    Sur la ligne (coté client):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler remoteOperation.Msg, AddressOf remoteOperation_Msg
    Interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Public Delegate Sub MessageDeliveredEventHandler(ByVal message As String)
     
    'Public Delegate Sub Msg(ByVal Message As MessageEventArgs)
     
    Public Interface IRemoteOperation
     
        Function Addition(ByVal a As Integer, ByVal b As Integer) As Integer
        Function Incrementation(ByVal valeur As Integer) As Integer
        'Event Msg(ByVal Message As MessageDeliveredEventHandler)
        Event Msg As MessageDeliveredEventHandler
        Sub Start()
        Sub Arret()
     
    End Interface
     
     
     
    Class MessageReceiver
        Inherits MarshalByRefObject
     
        '/// <summary>
        '/// Late-bound method as a workaround.
        '/// </summary>
        Public MessageDeliveredHandler As MessageDeliveredEventHandler
     
        '/// <summary>
        '/// It's not a client or a server. So I call late-bound method here.
        '/// </summary>
        '/// <param name="message"></param>
        Public Sub MessageDelivered(ByVal message As String)
            If (Not IsNothing(Me.MessageDeliveredHandler)) Then
                Me.MessageDeliveredHandler(message)
            End If
        End Sub
     
    End Class

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo