Quelles étapes dois-je suivre pour utiliser les rappels WCF?

J’essaie d’apprendre la WCF. J’ai une configuration simple des applications client et serveur et en appuyant sur un bouton du client, il obtient une valeur actualisée du serveur.

La prochaine étape est que j’essaie de rappeler le client au serveur pour mettre à jour sa valeur. J’ai parcouru de nombreux exemples, et ils semblent tout simplement trop gros et déroutants. Y a-t-il quelqu’un qui puisse donner l’exemple le plus simple de son implémentation en C #?

Je continue à regarder des exemples en ligne et je ne comprends tout simplement pas ce que cela prend? Bien sûr, je pourrais copier l’exemple ligne par ligne, mais cela ne me convient pas car je ne sais toujours pas quoi mettre en œuvre si je voulais le faire dans mon propre code.

Quelqu’un pourrait-il m’aider s’il vous plaît avec un exemple très simple sur quelles étapes je devrais prendre et ce que je devrais faire dans le code du serveur et ensuite dans le code du client pour y arriver?

Je vous remercie

Voici l’exemple le plus simple que je puisse trouver:

public interface IMyContractCallback { [OperationContract] void OnCallback(); } [ServiceContract(CallbackContract = typeof(IMyContractCallback))] public interface IMyContract { [OperationContract] void DoSomething(); } [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)] public class MyService : IMyContract { public void DoSomething() { Console.WriteLine("Hi from server!"); var callback = OperationContext.Current.GetCallbackChannel(); callback.OnCallback(); } } public class MyContractClient : DuplexClientBase { public MyContractClient(object callbackInstance, Binding binding, EndpointAddress remoteAddress) : base(callbackInstance, binding, remoteAddress) { } } public class MyCallbackClient : IMyContractCallback { public void OnCallback() { Console.WriteLine("Hi from client!"); } } class Program { static void Main(ssortingng[] args) { var uri = new Uri("net.tcp://localhost"); var binding = new NetTcpBinding(); var host = new ServiceHost(typeof(MyService), uri); host.AddServiceEndpoint(typeof(IMyContract), binding, ""); host.Open(); var callback = new MyCallbackClient(); var client = new MyContractClient(callback, binding, new EndpointAddress(uri)); var proxy = client.ChannelFactory.CreateChannel(); proxy.DoSomething(); // Printed in console: // Hi from server! // Hi from client! client.Close(); host.Close(); } } 

Quelques espaces de noms devront être inclus pour exécuter l’exemple:

 using System; using System.ServiceModel; using System.ServiceModel.Channels; 

Prenez une copie de “Programming WCF Services, 2nd Edition” par Juval Lowy. De grandes sections du livre sont consacrées aux opérations de rappel. Au chapitre 5, commencez à la page 214. Dans le chapitre sur la gestion des access concurrents (ch. 8), il y a encore plus d’informations.

“Programmation des services WCF” est plus ou moins la “bible” de la WCF.

Si je lis bien votre question, vous souhaitez avoir une conversation bidirectionnelle entre le client et le serveur (le serveur peut communiquer avec le client). WSDualHttpBinding vous donne cette fonctionnalité.

La sortingste réalité avec WCF est qu’il n’existe pas d’exemple simple. Vous devez définir des contrats, configurer les services, utiliser un hôte et créer un code client. Regardez cet article pour un exemple assez simple.

Je sais, vieille question … Je suis tombé sur cette question d’une recherche google plus tôt aujourd’hui et la réponse fournie par Ray Vernagus est l’exemple le plus facile à comprendre de WCF que j’ai lu à ce jour. A tel point que j’ai pu le réécrire dans VB.NET sans utiliser aucun convertisseur en ligne. Je pensais append la variante VB.NET de l’exemple fourni par Ray Vernagus. Créez simplement une nouvelle application VB.NET Windows Console, ajoutez une référence à System.ServiceModel et copiez / collez l’intégralité du code ci-dessous dans le fichier de classe Module1 par défaut.

 Imports System.ServiceModel Imports System.ServiceModel.Channels Public Interface IMyContractCallback  _ Sub OnCallBack() End Interface  _ Public Interface IMyContract  _ Sub DoSomething() End Interface  _ Public Class Myservice Implements IMyContract Public Sub DoSomething() Implements IMyContract.DoSomething Console.WriteLine("Hi from server!") Dim callback As IMyContractCallback = OperationContext.Current.GetCallbackChannel(Of IMyContractCallback)() callback.OnCallBack() End Sub End Class Public Class MyContractClient Inherits DuplexClientBase(Of IMyContract) Public Sub New(ByVal callbackinstance As Object, ByVal binding As Binding, ByVal remoteAddress As EndpointAddress) MyBase.New(callbackinstance, binding, remoteAddress) End Sub End Class Public Class MyCallbackClient Implements IMyContractCallback Public Sub OnCallBack() Implements IMyContractCallback.OnCallBack Console.WriteLine("Hi from client!") End Sub End Class Module Module1 Sub Main() Dim uri As New Uri("net.tcp://localhost") Dim binding As New NetTcpBinding() Dim host As New ServiceHost(GetType(Myservice), uri) host.AddServiceEndpoint(GetType(IMyContract), binding, "") host.Open() Dim callback As New MyCallbackClient() Dim client As New MyContractClient(callback, binding, New EndpointAddress(uri)) Dim proxy As IMyContract = client.ChannelFactory.CreateChannel() proxy.DoSomething() ' Printed in console: ' Hi from server! ' Hi from client! Console.ReadLine() client.Close() host.Close() End Sub End Module