WS-Eventing implementation deployed!

I really like travelling because I can spend more time coding. So, last week while travelling in Germany and Italy for work, I found some time to finish the WS-Eventing implementation to which I referred in previous posts (post1, post2). I am guessing that there are going to be interoperability problems with existing implementations because I chose to use the current version of WS-Addressing (March 2004) rather the one that the current WS-Eventing specification uses (March 2003).

I have made the assembly with both the source and sink implementations available (http://wsgaf.ncl.ac.uk/services/eventing/wse.dll) if anyone wishes to use it (no documentation yet apart from blog posts… perhaps will work on the documentation later). I guess it’s going to be more interesting testing interoperability with other implementations rather than downloading and using my assembly.

I have deployed a simple eventing service at http://wsgaf.ncl.ac.uk/services/eventing/eventing.ashx. You can use this endpoint as per the WS-Eventing specification minus two things for the moment: XPath support for the subscription filter and SOAP faults. When you subscribe your event sink with this service, you’ll receive a notification message every 5 seconds with the time here in Newcastle. Yes, I know… not the most useful information out there 🙂

Here’s the code for the simple program that raises this event (minus the “using” directives):

class
Program

{

static

void Main(string[] args)

{



Timer
timer = newTimer(int.Parse(args[0]));

timer.Elapsed += newElapsedEventHandler(timerElapsed);

timer.Enabled = true;


Console

.WriteLine(“Press ENTER to exit.”);



Console
.ReadLine();

}


static
void timerElapsed(object sender, System.Timers.ElapsedEventArgs e)

{



EventingSource
.RaiseEvent(newTimeInNewcastle(), newUri(“uk:ac:neresc:newcastletime:time”));

}

}

[XmlRoot(Namespace = “uk:ac:neresc:newcastletime”)]

public

class

TimeInNewcastle

{


public

DateTime
Time = DateTime.Now;

}

}

The EventingSource.RaiseEvent will do the trick.

A simple sink client that will start receiving events and then will send an “unregister” message follows:

class
Program

{

[STAThread]


static
void Main(string[] args)

{



Uri
sinkUri = newUri(“soap.tcp://localhost:10001/sink”);



Uri
serviceUri = newUri(“soap.tcp://localhost:10002/service”);



SoapReceivers
.Add(newEndpointReference(sinkUri), typeof(SinkSoapService));



SoapReceivers
.Add(newEndpointReference(serviceUri), typeof(MySoapReceiver));



Subscription
subscription = newSubscription(newUri(“http://wsgaf.ncl.ac.uk/services/eventing/eventing.ashx”));

subscription.EndTo = new uk.ac.neresc.eventing.messages.Epr(sinkUri);

subscription.NotifyTo = new uk.ac.neresc.eventing.messages.Epr(serviceUri);

subscription.Lease.Duration = newTimeSpan(0, 0, 10);

// You can even add Refernece Properties if you want here



EventingSource
.Register(subscription);



Console
.WriteLine(“Waiting for ENTER”);



Console
.ReadLine();



EventingSource
.UnRegister(subscription);



Console
.WriteLine(“Waiting for ENTER”);



Console
.ReadLine();

}


class

MySoapReceiver
: SoapReceiver

{


public

MySoapReceiver
()

{

}


protected
override
void Receive(SoapEnvelope envelope)

{



Console
.WriteLine(“Event received…”);

envelope.Body.WriteTo(new System.Xml.XmlTextWriter(Console.Out));

}

}

}

Please feel free to send me comments/questions/complaints/requests etc.

Recent Posts

Digital Twin (my playground)

I am embarking on a side project that involves memory and multimodal understanding for an…

2 months ago

“This is exactly what LLMs are made for”

I was in Toronto, Canada. I'm on the flight back home now. The trip was…

9 months ago

AI is enhancing me

AI as an enhancer of human abilities.

10 months ago

“How we fell out of love with voice assistants”

The BBC article "How we fell out of love with voice assistants" by Katherine Latham…

1 year ago

Ontology-based reasoning with ChatGPT’s help

Like so many others out there, I played a bit with ChatGPT. I noticed examples…

1 year ago

Break from work

Hi all… It’s been a while since I posted on this blog. It’s been an…

2 years ago