Я знаю, что WCF поддерживает многие протоколы WS- *, но WS-Eventing, кажется, указан в списке.
Я знаю, что WCF имеет модель pub / sub, но совместима ли она с WS-Eventing?
Кажется, я помню, что читал об этом на CodeProject некоторое время назад.
Извините, я не могу больше помочь, но это статья Романа Кисса .
По крайней мере с 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); }
В WCF 3.0 нет собственной модели публикации / публикации, однако есть несколько вариантов. - Найдена статья о поцелуе Римлянина. - Существует множество других шаблонов, которые вы можете реализовать (см. MSDN Mag ) - У Ювала Лоуи есть две реализации фреймворка, которые вы можете скачать на его сайте по адресу IDesign - Наконец, в настоящее время я использую для имитации этого с небольшими накладными расходами MSMQ.