我知道WCF支持许多WS-*协议,但似乎列出了WS-Eventing。
我知道WCF有一个发布/订阅模型,但是它符合WS-Eventing吗?
发布于 2008-09-20 04:27:12
我似乎记得不久前在CodeProject上读过这篇文章。
抱歉,我帮不了你,但是罗曼之吻的this is the article。
发布于 2010-11-15 22:24:33
至少使用WCF4,您可以通过导入WS-Eventing wsdl (使用soap绑定)来简单地创建一个WSDL客户端。它需要双工绑定,因此http双工或简单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);
}发布于 2009-03-03 12:14:06
在WCF 3.0中没有原生的发布/订阅模型,但是有一些选项。
MSDN Mag)
https://stackoverflow.com/questions/107079
复制相似问题