Поддерживает ли WCF WS-Eventing?
-
01-07-2019 - |
Вопрос
Я знаю, что WCF поддерживает множество протоколов WS-*, но WS-Eventing, похоже, присутствует в списке.
Я знаю, что в WCF есть модель публикации/подписки, но совместима ли она с WS-Eventing?
Решение
Кажется, я недавно читал об этом на CodeProject.
Извините, я не могу больше помочь, но это статья Роман Кисс.
Другие советы
По крайней мере, с WCF4 вы можете просто создать клиент wsdl, импортировав WSDL 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)
- У Юваля Лоуи есть две реализации фреймворка, которые вы можете скачать на его сайте по адресу Дизайн
- Наконец, в настоящее время я использую MSMQ, чтобы имитировать это с небольшими накладными расходами.