Implementing a WCF service firewall part I of N
One of the SOA patterns I already described is the Service Firewall. The idea behind the service firewall is to have an intermidiator between the actual service and callers and inspect in an applicative level incoming and outgoing messages.

Anyway,
while I documented the pattern as a security one, I am actually going
to implement it for another purpose - a saga filter.
In our implementation of EventBroker
I made the design decision to have services expose regular WCF
contract. i.e. services can communicate with each other directly and
not just via eventing. This design decision is there to allow both
interaction with non WCF services and to allow flexibility for multiple
message exchange pattern (where events are not the best choice).
Another
design decision we have is that we have two types of services. Servers
and Channels. Servers handle multiple sessions and are (relatively)
heavy to write. Channels on the other hand are light-weight services
that are stateful and dedicated for a specific session. Naturally
there are a lot of instances of channels to allow supporting multiple
sessions (and there are infrastructure bits to allow allocations and
propagate liveliness etc. but that's another story). Channels have
several benefits like increasing the systems capabilities to cope with
failure (if a channel is down only the session it supported fails). One
of the benefits of Channels is simple coding model. The Channel is
dedicated to a session (typically a saga) and thus it doesn't have to
handle all the routing of messages to sagas etc. that Servers have to
cope with. This is where the Service Firewall comes to play.
In
order to keep channels' code simple "someone" has to make sure the
channel doesn't get messages that are not related to the saga it is
part of. Otherwise the Channel will have to know about its current
active saga and filter messages by itself - which kind of misses the
point.
Making sure other services will not send messages while not in saga etc. will only take us so far (you know - latencies
and stuff). A service firewall will let us intercept the messages
before they reach the service and only allow the messages related to an
active saga to pass through (while maintaining the benefits of direct
contracts).
WCF has a rich extensibility model (see figure from MSDN
below). This series will show how you can use some of these extension
points to implement a service firewall and achieve the goal depicted
above. I hope you'd find it interesting.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)





