Frage

Ich weiß, dass WCF viele WS-*-Protokolle unterstützt, aber WS-Eventing scheint aufgeführt zu sein.

Ich weiß, dass WCF ein Pub/Sub-Modell hat, aber ist es WS-Eventing-kompatibel?

War es hilfreich?

Lösung

Ich erinnere mich, dass ich vor einiger Zeit auf CodeProject darüber gelesen habe.

Tut mir leid, ich kann nicht mehr helfen, aber das ist der Artikel von Roman Kiss.

Andere Tipps

Mindestens mit WCF4 können Sie einfach eine WSDL-Datei Client erstellen, indem Sie die WS-Eventing WSDL Import (mit Seife Bindung). Es erfordert eine Duplex-Bindung so entweder http-duplex oder einfach tcp funktionieren soll. Das Problem ist das Hinzufügen des korrekten Rückrufs. Für uns ist das der Trick

                            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);
                        }

Es gibt kein native pub / sub-Modell in WCF 3.0, aber es gibt ein paar Optionen.
- Der Roman Kuss Artikel Ash gefunden
. - Es gibt viele andere Muster könnten Sie (bedeckt implementieren in MSDN Mag )
- Juval Lowy hat zwei Rahmen Implementierungen Sie auf seiner Website herunterladen können unter IDesign
- Schließlich, was ich bin derzeit mit diesem mit wenig Aufwand zu imitieren ist MSMQ.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top