WCF поддерживает WS-Eventing? - PullRequest
       14

WCF поддерживает WS-Eventing?

3 голосов
/ 20 сентября 2008

Я знаю, что WCF поддерживает многие протоколы WS- *, но WS-Eventing, кажется, указан в списке.

Я знаю, что WCF имеет модель pub / sub, но совместима ли она с WS-Eventing?

Ответы [ 3 ]

3 голосов
/ 20 сентября 2008

Кажется, я помню, что читал об этом на CodeProject некоторое время назад.

Извините, я не могу больше помочь, но это статья Романа Кисса .

1 голос
/ 15 ноября 2010

По крайней мере с WCF4 вы можете просто создать клиента wsdl, импортировав WS-Eventing WS-Eventing (с привязкой мыла). Это требует дуплексного связывания, поэтому должен работать либо http-duplex, либо простой tcp. Проблема заключается в добавлении правильного обратного вызова. Для нас это сделало трюк

                            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);
                        }
0 голосов
/ 03 марта 2009

В WCF 3.0 нет собственной модели публикации / публикации, однако есть несколько вариантов.
- Найдена статья о поцелуе Римлянина.
- Существует множество других шаблонов, которые вы можете реализовать (см. MSDN Mag )
- У Ювала Лоуи есть две реализации фреймворка, которые вы можете скачать на его сайте по адресу IDesign
- Наконец, в настоящее время я использую для имитации этого с небольшими накладными расходами MSMQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...