Asynchronous Remoting Server

by admin 28. September 2005 11:51

If you've ever written a .NET remoting channel you'd have come across the ServerProcessing.Async value. This value should indicate that a server object is handling a message asynchronously. There's then a some additional infrastructure for handling the real message reply later when it becomes available (through the use of IServerChannelSinkStack).

Up until now this value has been largely unused. In standard remoting it is never returned (it is possibly used in CrossAppDomain calls). I say up until now because I have now successfully made use of it!

For my PhD I needed to provide a method for application programmers to create asynchronous implementation of methods. I've based this off the undocumented ASP.NET web service async implementation model which is something like this:

int Foo(string value)

IAsyncResult BeginFoo(string value);
int EndFoo(IAsyncResult ar);

As you can see the implementation of Foo will be split across two methods - BeginFoo and EndFoo. When BeginFoo returns it supplies an IAsyncResult which will be triggered by some third party (perhaps another method call to the same object, or the result of an IO becoming available). The framework is then responsible for calling EndFoo. Clients should be hidden from the details - in fact they simply call Foo - the BeginFoo/EndFoo stuff all happens on the server side.

Currently there's no nice way of providing the Foo signature to clients so a dummy Foo implementation must be required (something like just throwing NotImplementedException is fine since it's never called). ASP.NET gets around this by generating appropriate WSDL when it finds two methods that match this BeginFoo/EndFoo pattern.

Of course, even though I got to make use of the Async return value I found that some of the supporting clases required a bit of massaging to get working properly. This doesn't surprise me since I don't think this is ever used in standard remoting...

Comments are closed

About Us

RikWare is a software development company based in Brisbane, Australia. Led by director, Richard Mason, RikWare focusses on solving challenging business problems promptly and effectively.

RikWare is also the owner of Aussie Bushwalking, a free, wiki-like collaboration site for bushwalkers and the creator of RikMigrations, a migration framework for .NET.

Aussie Bushwalking

Want to discover some new bushwalking ideas? Share a few of your own? Aussie Bushwalking is like Wikipedia... but for bushwalkers. Head on over. Anybody can see the walks and it's free to sign up and share your own.



RikMigrations is a database migration library for .NET based on the migrations facility provided by Ruby on Rails. It allows simple upgrading and downgrading of databases using .NET code (such as VB or C#) either from the command line or built into your application. Unlike many other migration frameworks, RikMigrations is a stand-alone library which does not rely on a large surrounding framework.