Question

Je sais que WCF prend en charge de nombreux protocoles WS- *, mais WS-Eventing semble être répertorié.

Je sais que WCF a un modèle pub / sub, mais est-il conforme à WS-Eventing?

Était-ce utile?

La solution

Je crois me souvenir d’avoir lu cela à propos de CodeProject il ya quelque temps.

Désolé, je ne peux pas vous aider davantage, mais cet article est par Roman Kiss. ??

Autres conseils

Au moins avec WCF4, vous pouvez simplement créer un client WSDL en important le WSDL WS-Eventing (avec une liaison soap). Il nécessite une liaison en duplex, donc http-duplex ou tcp simple devrait fonctionner. Le problème est l'ajout du rappel correct. Pour nous, cela a fait le tour

                            Subscribe s = new Subscribe();
                        (s.Delivery = new DeliveryType()).Mode = "http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push";

                        XmlDocument doc = new XmlDocument();
                        using (XmlWriter writer = doc.CreateNavigator().AppendChild())
                        {
                            EndpointReferenceType notifyTo = new EndpointReferenceType();

                            (notifyTo.Address = new AttributedURI()).Value = callbackEndpoint.Uri.AbsoluteUri;

                            XmlRootAttribute notifyToElem = new XmlRootAttribute("NotifyTo");
                            notifyToElem.Namespace = "http://schemas.xmlsoap.org/ws/2004/08/eventing";

                            XmlDocument doc2 = new XmlDocument();                                    
                            using (XmlWriter writer2 = doc2.CreateNavigator().AppendChild())
                            {
                                XmlRootAttribute ReferenceElement = new XmlRootAttribute("ReferenceElement");
                                foreach(AddressHeader h in callbackEndpoint.Headers)
                                {
                                    h.WriteAddressHeader(writer2);  
                                }

                                writer2.Close();
                                notifyTo.ReferenceParameters = new ReferenceParametersType();
                                notifyTo.ReferenceParameters.Any = notifyTo.ReferenceParameters.Any = doc2.ChildNodes.Cast<XmlElement>().ToArray<XmlElement>();               
                            }

                            new XmlSerializer(notifyTo.GetType(), notifyToElem).Serialize(writer, notifyTo);
                        }

                        (s.Delivery.Any = new XmlElement[1])[0] = doc.DocumentElement;
                        (s.Filter = new FilterType()).Dialect = "http://schemas.xmlsoap.org/ws/2006/02/devprof/Action";
                        (s.Filter.Any = new System.Xml.XmlNode[1])[0] = new System.Xml.XmlDocument().CreateTextNode("http://www.teco.edu/SensorValues/SensorValuesEventOut");

                        SubscribeResponse subscription;
                        try
                        {
                            Console.WriteLine("Subscribing to the event...");
                            //Console.ReadLine();
                            subscription = eventSource.SubscribeOp(s);
                        }

Il n’existe pas de modèle pub / sub natif dans WCF 3.0, mais il existe quelques options.
- L'article de Roman Kiss sur Ash a été trouvé.
- Il existe de nombreux autres modèles que vous pouvez implémenter (décrits dans MSDN Mag )
- Juval Lowy dispose de deux implémentations d'infrastructure que vous pouvez télécharger sur son site à l'adresse IDesign . - Enfin, MSMQ est ce que j’utilise actuellement pour mimer cela avec peu de frais généraux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top