New and Notable 254

Service Security/Identity Management/SOA

  • I am super thrilled to see Microsoft roll out "Zermatt", a .NET developer framework and SDK to help build claims-based applications. I,  like Eugenio here, had to roll out my own a couple of months ago in a gig. I made use of Dominick's excellent LeastPrivilege.IdentityModel library in the meantime. Eugenio's post lists a number of resources to get started so check it out!!
  • Via Gunnar, found about Arnon's post on taking a greater view of SOA Security, which I wholeheartedly agree with

CLR/DLR

SQL Server/Data Dude

My New Love Affair with Live Mesh

You know, I'm so jaded from having working for Ray Ozzie at Groove and John Landry at Adesso so I have seen all this before and passed on LiveMesh the first time :) However, reading Brad's post about the Terminal Service from 10,000 miles away and listening to my good friend Jon Flanders go on about it the other night, I have given another try and fallen in love. The need for UAC seems to have gone away. I am syncing lots of user group files between PCs and guess what? My SmartPhone! I can not only log in and see all my files, but using Office Mobile in Windows Mobile 6, I can edit them and sync them back! The Add Picture stuff is not working yet, but I can take previous shot pictures and sync them to PCs and such. This tool rocks!

Technorati Tags: ,
New and Notable 253

C#/.NET Programming/WPF

ASP.NET MVC

How Can I Help You With Your WCF/WF/Neuron/Messaging Needs Today?

I mentioned that I was looking for new opportunities but I have decided to concentrate my independent Microsoft .NET consulting on all things Connected Systems and Messaging. I see many shops around the country struggling with WCF and WF. In this area, I have been a part of the WCF and WF SDRs for 4 years now since the beginning and part of the large 2-year WCF and WF effort at Algorithmics. I am available, on a consulting basis, to help you with your WCF, WF and BizTalk needs. In addition, I believe that WCF is too low-level and difficult for many shops that are pursuing Services and SOA beyond a few causal services. To that end, I am an authorized representative for Neuron ESB and it's place in accelerating your WCF and SOA efforts.  Using my 26 years in the industry, I can help you look at your Architecture and find ways to make it better. Not only that, but I can help ensure you are on the right path for Oslo. If you are interested, please respond here or email to managedcode44 AT hotmail. Please do not use that email for unrelated questions - that's what the comments and newsgroups are for.

Capital Area .NET Advanced WCF Demo Code

I finally put up all the demo code (except Neuron) for the Capital Area .NET UG presentation that I did on 6/24. So:

Code here

Presentation here

Questions, ask

Sam Gentile PhillyNJ.NET July 31, 2008

I will be be taking my Advanced WCF: Asynchronous Messaging and Event-Driven Architectures talk to the July 31st meeting of PhillyNJ, which is a sub-chapter of the excellent Philly.NET group. I am real pleased, that my friend, Hilary Cotter, is speaking first on SQL Replication for Developers. Come on out!!

Hilary Cotter - SQL Replication for Developers

In this session SQL Server MVP and replication guru Hilary Cotter explains the essentials of SQL Server replication for developers.  Hilary covers replication concepts, what technology is a best fit for data distribution, application considerations, and the new Sync Services in VS/SQL 2008. This is a high level session designed to help you get productive and presents material in both tsql and c# code.

Hilary has been involved in IT for over 20 years. He is a SQL Server consultant specializing in search and replication solutions. He wrote a book on SQL Server replication and is currently working on a SQL Server 2008 Administration book and another book on SQL Server 2008 full-text search.

Sam Gentile - Advanced WCF: Asynchronous Messaging and Event-Driven Architectures

Many WCF developers start and end with the Request/Response Message Exchange Pattern.  In actuality, there is a wide variety of Message Exchange Patterns cataloged by Hohpe and Woolfe in books like “Enterprise Integration Patterns” and Pattern & Practices “Integration Patterns.” In this advanced talk, that starts where most WCF talks leave off, we will show you how to build more loosely-coupled services and systems via these MEPs and with WCF. We will then focus on the powerful List-Based Publish/Subscribe Design Pattern. Upon showing how many lines of WCF code are required to implement the pattern in WCF, we will show the pattern as the basis for the Neuron ESB and achieve the same results with zero code. We will then focus on Mediation and how ESBs help mediate between disparate services.

Sam is an Independent .NET Consultant, where he uses WCF, Neuron, WF and BizTalk in delivering Real-World SOA solutions together with Microsoft. Sam was recently awarded the MVP award for Connected Systems for the 4th consecutive year. Sam is also an INETA Speaker, delivering advanced SOA and .NET training all over the world.
New and Notable 252

Just got back from a 10 day vacation with my family from lovely LA. We went to Universal and then spent 2 and 1/2 days at Disneyland, which Heather and Jonathan loved. I also got to spent some quality time with my very good friend Jon Flanders.

ASP.NET MVC

  • Preview 4 of ASP.NET MVC is out on CodePlex.
  • ScottGu has an extensive post on the new features
  • Phil has Notes on the release
  • Steven Walter has a post as well on the new features, which he lists as, and I quote,
    • · HandleError Action Filter – Simply by adding the HandleError attribute to any controller action (or controller class), you can redirect to a custom error view whenever an exception is raised.

      · OutputCache Action Filter – Simply by adding the OutputCache attribute to any controller action, you can cache the output of the action.

      · Authorize Action Filter – Simply by adding the Authorize attribute to any controller action, you can control who can call an action. For example, you can restrict access to a particular controller action by user or by role.

      · AccountController – The Controllers folder includes a new controller named the AccountController. This controller includes Login, Logout, Register, and ChangePassword actions. The sample application uses the AccountController to enable you to log into and log out of the sample website.

      · Ajax Helpers – This release of the ASP.NET MVC framework includes two Ajax helpers that you can use when creating a view: Ajax.ActionLink and Ajax.Form. The Ajax.ActionLink helper renders a link that performs an asynchronous request to the server. The Ajax.Form helper performs an asynchronous form post to the server.

  • MVC Storefront Part 17: Checkout With Jeff Atwood
  • New Modules for IIS7: Application Request Routing - Proxy and Load Balancing Module

.NET/Visual Studio 2008/Sharepoint

New and Notable 251

.NET/C#/Functional Programming

WCF/MSMQ

Technorati Tags: ,,,,
New and Notable 250

Visual Studio

BizTalk/WCF/WF/SOA

LA/Pasadena Until the 16th

I am heading out today to LA, where I will be in Pasadena until the 16th. Drop a note if you would like to get together. Jon, sending you email.

Technorati Tags:
New and Notable 249

Its about time to clear out the backlog.

CLR/.NET/Visual Studio/TDD/ALT.NET

WCF/SOA/SaaS/Enterprise Architecture

Software Architecture

Microsoft SOA: Inadequate?

ZapThink has some strong opinions on Microsoft SOA centering around Microsoft defining SOA as integration, particularly web services integration, not broader Enterprise Architecture (They called them "tone deaf." :). For me, there is some truth to this as products such as BizTalk are phenomenal EAI products, point to point integration products, not really SOA products, at least not without some partner help. Microsoft has dismissed ESBs for years and now believes the "pattern" belongs in the sky. Meanwhile, people have real SOA/SOI needs today and need a comprehensive end to end story on SOA from soup to nuts. IBM, TIBCO and many of the "big boys" have this from model to finished service registries. To be fair, Microsoft will have all this in Oslo and also to be fair, Microsoft does have a good Real World SOA message and a Middle-out approach. They are getting there and I believe partners like SOA Software, Amberpoint, Neudesic/Neuron help them have a story today. It needs to be better articulated, which in some regards, is the point of my series.

Follow-up Links

SOA: Making the Paradigm Shift Part 11 of N

Welcome to the 11th article in the series. In this article, I will take a broad detour from the abstract into the concrete with WCF. The title of this article is "Introduction to WCF: Architecture and the "ABCs" of Indigo." BTW, I have been in the Indigo SDR program for over 4 years and the term Indigo has stuck in my mind, so I will use the terms interchangeably. Plus, as I think Don Box said in a presentation, It's spelled W-C-F and pronounced Indigo. The WCF is silent." :)

Hello Indigo Step by Step

I am going to show you WCF step by step and make it as easy as possible. To that end, I am put both the Sender and Receiver in the same console application and I am not going to use either generated proxies or config files. You would never do this in the real world, but it makes it easy to describe the "ABCs" of WCF.

So, let's start with a shell console application that should be totally familiar to you. Run VS2008 and Create a new C# Console application and replace the code with the following.

using System;
using System.ServiceModel;

namespace HelloIndigo
{
    class Program
    {
        static void Main()
        {
           
        }
    }
}
 
A Service is a Set of Endpoints
A WCF service is a set of endpoints that provide something of value to the client. An endpoint is simply a resource on the network to which messages can be sent.
 

The ABC's of WCF

A is For Address, the "Where"

The first concept is that of the Address. The Address is where our application will hang its hat, waiting and listening for incoming messages. We need to use the System.Uri type to do this:

    Uri address = new Uri("http://localhost:8000/HelloIndigo");
B is For Binding, the "How"

The next thing we need is a Binding. Bindings can get complicated with their shaping of channel stacks but for now, lets leave it as a binding defines the channel used to communicate with an endpoint. A channel is combined of a series of binding elements which are a combination of a transport, Message Exchange Pattern, and a message encoder. We will use bacicHttpBinding which directs WCF to implement the WS-I Basic Profile 1.1, the lowest common denominator of interoperability.

BasicHttpBinding binding = new BasicHttpBinding();
C is For Contract, the "What"
The Contract is the heart and soul of WCF, and I would say Service-Orientation. It is a syntactic description of what operations the service responds to and what shape the messages take going in and out.
    [ServiceContract]
    public interface IHelloIndigo
    {
        [OperationContract]
        void SaySomething(string message);
    }
 
Here I have defined a contract, IHelloIndigo, and the [ServiceContract] attribute marks the interface as a contract. Be assured, however, that [ServiceContract] generates an underlying WSDL PortType and the [OperationContract] defines WSDL Operations and messages.
 
So our code looks like this so far:
   [ServiceContract]
    public interface IHelloIndigo
    {
        [OperationContract]
        void SaySomething(string message);
    }

    sealed class HelloIndigo : IHelloIndigo
    {
        private static void Main()
        {
            // We got an "A" and a "B"
            Uri address = new Uri("http://localhost:8000/IHelloIndigo");
            BasicHttpBinding binding = new BasicHttpBinding();
 
Can You Hear Me Now?

So, we have our ABCs of WCF but our Service is lacking an Endpoint to listen on and it's lacking a host. Remember, that a Service has one or more Endpoints that listen for messages. Each Endpoint is made up of an Address, Binding, and Contract. We will use the AddServiceEndpoint method on the ServiceHost class to do this. Say what? We haven't talked about ServiceHost. The System.ServiceModel.ServiceHost type builds and hosts endpoints, along with the rest of the recieving architecture. We'll have a lot more to say about this class later.

            ServiceHost serviceHost = new ServiceHost(typeof (HelloIndigo));
            serviceHost.AddServiceEndpoint(typeof (IHelloIndigo), binding, address);
            serviceHost.Open();

            Console.WriteLine("We is ready to receieve");
            Console.ReadLine();
            serviceHost.Close();
 
We have one aspect that I neglected. Up above, you will see that class HelloIndigo implements IHelloIndigo, so that there is a mapping in the messaging infrastructure to the programming type HelloIndigo.
We will implement the method so that recieved messages are dispatched to this instance:
 Public void SaySomething(String message)
{
            Console.WriteLine("We got the message, And the body contains: {0}", message);
}
 
Now we are 1/2 way down. We have a Service Endpoint just hanging out at some address patiently waiting for some kind soul to send messages to it. If we now run and do a netstat -a -b, we can see that it is indeed the case.
 
TCP    [::]:8000              Sam-PC:0               LISTENING
 
Send Me!

At this point, you would normally create the separate client project, would generate the proxy with svcutil.exe or Add Service Reference. But since we are after simplicity, as I mentioned, we will put the sender in the same application. It is the sender's responsibility to use an address, binding, contract that is compataible with the receiver/service.

However, the types are a bit different on the sender side. Instead of a URI type, we have a System.ServiceModel.EndpointAddress which is a WCF abstraction for a WS-Addressing endpoint. Also, instead of ServiceHost, we are the client and we use the ChannelFactory<T> type. Now, normally one would put the address, binding and contract in a config file and use a proxy, but what I am showing you here avoids the need to generate a proxy altogether. So we have:

// Sender time
            ChannelFactory<IHelloIndigo> channelFactory = 
                new ChannelFactory<IHelloIndigo>(binding, new EndpointAddress(address));
            IHelloIndigo proxy = channelFactory.CreateChannel();
            proxy.SaySomething("Hello Capital City");


            Console.ReadLine();
            serviceHost.Close();

If we now run the complete program we get our desired result:

We is ready to receieve
HelloIndigo Object Created
We got the message, and the body contains: Hello Capital City
 
The whole program is as follows:
using System;
using System.ServiceModel;

namespace Gentile.Demos.HelloIndigo
{
    [ServiceContract]
    public interface IHelloIndigo
    {
        [OperationContract]
        void SaySomething(string message);
    }

    sealed class HelloIndigo : IHelloIndigo
    {
        public HelloIndigo()
        {
            Console.WriteLine("HelloIndigo Object Created");
        }

        private static void Main()
        {
            // We got an "A" and a "B"
            Uri address = new Uri("http://localhost:8000/IHelloIndigo");
            BasicHttpBinding binding = new BasicHttpBinding();

            ServiceHost serviceHost = new ServiceHost(typeof (HelloIndigo));
            serviceHost.AddServiceEndpoint(typeof (IHelloIndigo), binding, address);
            serviceHost.Open();

            Console.WriteLine("We is ready to receieve");

            // Sender time
            ChannelFactory<IHelloIndigo> channelFactory = 
                new ChannelFactory<IHelloIndigo>(binding, new EndpointAddress(address));
            IHelloIndigo proxy = channelFactory.CreateChannel();
            proxy.SaySomething("Hello Capital City");


            Console.ReadLine();
            serviceHost.Close();
        }

        #region IHelloIndigo Members

        public void SaySomething(string message)
        {
            Console.WriteLine("We got the message, and the body contains: {0}", message);
        }

        #endregion
    }
}

 

Where the Heck are the Messages?

So, this doesn't look at all like a messaging system! To the WCF developer, looks, feels, smells like any other OO or component object program. Be assured, that at run time, however, that the Indigo architecture is configuring channel stacks and dealing with messages. How can I show that? If I change the implementation of the of the SaySomething method to the following, we can see the messages:

        public void SaySomething(string message)
        {
            Console.WriteLine("We got the message, and the body contains: {0}", message);
            // This looks like RPC! Where's the Messages???
            Console.WriteLine(OperationContext.Current.RequestContext.RequestMessage.ToString());
        }

 

We is ready to receieve
HelloIndigo Object Created
We got the message, and the body contains: Hello Capital City
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addr
essing/none">http://localhost:4000/IHelloIndigo</To>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/
addressing/none">http://tempuri.org/IHelloIndigo/SaySomething</Action>
  </s:Header>
  <s:Body>
    <SaySomething xmlns="http://tempuri.org/">
      <message>Hello Capital City</message>
    </SaySomething>
  </s:Body>
</s:Envelope>

What About WS-* Messages?

If we comment out one line and change the binding, we see the WS-* messages:

We is ready to receieve
HelloIndigo Object Created
We got the message, and the body contains: Hello Capital City
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://ww
w.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oas
is-200401-wss-wssecurity-utility-1.0.xsd">
  <s:Header>
    <a:Action s:mustUnderstand="1" u:Id="_2">http://tempuri.org/IHelloIndigo/Say
Something</a:Action>
    <a:MessageID u:Id="_3">urn:uuid:5d7c73b2-ad24-4839-881f-f01e035d7cdf</a:Mess
ageID>
    <a:ReplyTo u:Id="_4">
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1" u:Id="_5">http://localhost:4000/IHelloIndigo</a:T
o>
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/200
4/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <u:Timestamp u:Id="uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-17">
        <u:Created>2008-07-03T20:28:26.395Z</u:Created>
        <u:Expires>2008-07-03T20:33:26.395Z</u:Expires>
      </u:Timestamp>
      <c:SecurityContextToken u:Id="uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-9"
xmlns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
        <c:Identifier>urn:uuid:be58d427-4e04-45d5-8e9d-2b9a5c304a53</c:Identifie
r>
      </c:SecurityContextToken>
      <c:DerivedKeyToken u:Id="uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-15" xml
ns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
        <o:SecurityTokenReference>
          <o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"
URI="#uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-9" />
        </o:SecurityTokenReference>
        <c:Offset>0</c:Offset>
        <c:Length>24</c:Length>
        <c:Nonce>tXSjaqdURYJgrl7UVJSWmA==</c:Nonce>
      </c:DerivedKeyToken>
      <c:DerivedKeyToken u:Id="uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-16" xml
ns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
        <o:SecurityTokenReference>
          <o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"
URI="#uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-9" />
        </o:SecurityTokenReference>
        <c:Nonce>fBMvI6q1DGWhXk4w9zr7tQ==</c:Nonce>
      </c:DerivedKeyToken>
      <e:ReferenceList xmlns:e="http://www.w3.org/2001/04/xmlenc#">
        <e:DataReference URI="#_1" />
        <e:DataReference URI="#_6" />
      </e:ReferenceList>
      <e:EncryptedData Id="_6" Type="http://www.w3.org/2001/04/xmlenc#Element" x
mlns:e="http://www.w3.org/2001/04/xmlenc#">
        <e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-c
bc" />
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
          <o:SecurityTokenReference>
            <o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/dk"
URI="#uuid-07366b5a-18e1-46bc-9df7-bb5fc5cf842d-16" />
          </o:SecurityTokenReference>
        </KeyInfo>
        <e:CipherData>
          <e:CipherValue>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</e:CipherValue>
        </e:CipherData>
      </e:EncryptedData>
    </o:Security>
  </s:Header>
  <s:Body u:Id="_0">
    <SaySomething xmlns="http://tempuri.org/">
      <message>Hello Capital City</message>
    </SaySomething>
  </s:Body>
</s:Envelope>
SOA: Making the Paradigm Shift Part 10 of N

This is the 10th article in the series. I should mention that much of the series so far has been geared at a high level and strategic focus for IT Decision Makers rather than for those writing code. This is deliberate as much of SOA is an "Enterprise IT" activity. There has been a fair amount geared towards Architects as well. That will change as I get into Indigo, but today's topic is again a strategic one. Given that we have looked at the current state of SOA, how to make the paradigm shift and SOA design approaches, we are now faced with the questions of what should I do "Short Term" and what investments should I make "Long Term."

As a reminder, the series so far is:

As we went along, I talked about the need to build a Capability Driven strategy, as IT needed to become more in sync with the needs of the business, and the capabilities that the business offers. I talked about ensuring that SOA is part of the implementation in current and upcoming projects. Becoming Service Oriented is an important first step, realizing that exposing business assets as reusable services is more important than creating another island. This "paradigm shift" requires developers and architects to think beyond one application and to the needs of the enterprise as a whole, in support of business drivers. I talked about using Microsoft IO to access the current state of your IT as part of a maturity model and using it as step-by-step guidance in creating an Agile IT that is Service Enabled.

Short-Term vs. Long-Term

It can become difficult, and sometimes impossible to measure SOA benefits using traditional Return On Investment (ROI) approaches because SOA projects remain a moving target. This is the nature of SOA; the need to enable, support, and manage more-frequent changes. Many people have experiences with SOA that run that gamut from spotty (we wrote a web service and it worked - we'll try again next year) to scared (analysts quoting cost of SOA to be larger than the companies' entire budget). Even though many CIOs see moving to SOA inevitable, most are still challenged to articulate what the business is going to get for its money if they allow their IT people to go off on yet another initiative.

In this regard. Long-Term "Investment" projects can be difficult to recover. Companies need to deliver value right now and yet contain or control longer-term management costs.

As enterprise adoption of services continues, the need for a service-oriented architecture will start to be felt. There's a big difference between the casual use of services and running your enterprise primarily over services. As enterprises travel down the road that will take them from light use of services to deep use of services, many issues will arise, such as how to manage large numbers of services well; how to overcome differences between services; how to enforce SLAs; and how to enforce enterprise policies across distributed collections of services.

The Enterprise Service Bus

Pinning down the definition for ESBs can be just as elusive as pinning down the definition for SOA. There is certainly definitions and redefinition's by ESB vendors to suit their purposes. Some of these definitions are:

"A Web-services-capable infrastructure that supports intelligently directed communication and mediated relationships among loosely coupled and decoupled biz components."            - Gartner Group

"The ESB label simply implies that a product is some type of integration middleware product that supports both MOM and Web services protocols."         –Burton Group

"A standards-based integration backbone, combining messaging, Web services, transformation, and intelligent routing."   –Sonic Software

"An enterprise platform that implements standardized interfaces for communication, connectivity, transformation, and security."     - Fiorano Software

"To put it bluntly: If you have WebSphere MQ and other WebSphere brokers and integration servers, you have an ESB."                  –Bob Sutor, IBM

"The Enterprise Service Bus is a uniform service integration architecture of infrastructure services that provides consistent support to business services across a defined ecosystem. The ESB is implemented as a service oriented architecture using Web Service interfaces."                                      –CBDI

However, I do think one can be practical about it, stay out of the wars and see what's common in the definitions. One practical view of the "common" ESB Functions can be found in the Wikipedia definition [1]

Category Function
Invocation Support for synchronous and asynchronous transport protocols, service mapping (locating and binding)
Routing Addressability, static/deterministic routing, content-based routing, rules-based routing, policy-based routing
Mediation Adapters, protocol transformation, service mapping
Process Choreography1 Implementation of complex business processes
Service Orchestration Coordination of multiple implementation services exposed as a single, aggregate service
Complex Event Processing/EDA Event interpretation, correlation, pattern matching
Other Quality of Service Security (encryption and signing), reliable delivery, transaction management
Management Monitoring, audit, logging, metering, admin console, BAM
   

1 Some do not consider Process Choreography to be an ESB function.

² While Process Choreography supports implementation of complex business processes that require coordination of multiple business services (usually using BPEL), Service Orchestration enables coordination of multiple implementation services (most suitably exposed as an aggregate service) to serve individual requests.

In this article, we are interested in looking how an ESB can help us over the longer-term as an "investment" made now to help us accelerate our SOA efforts. In other words, buying an ESB will not implement a service-oriented architecture, but provide the features in which one may be built.

But what is an Enterprise Service Bus and what is the value of it to my infrastructure and to my SOA? For our purposes, I am going to focus on three main areas:

An ESB is an operating environment for Services

An ESB provides the architecture needed for deep adoption of services. As I stated earlier, once your organization begins to move from casual use of services to running your enterprise primarily on services, the need for something like an ESB will be more acutely felt. As stated above, many issues will arise, such as how to manage large numbers of services well; how to overcome differences between services; how to enforce SLAs; and how to enforce enterprise policies across distributed collections of services. An ESB is a backbone for connecting and integrating an enterprise's applications and services. An ESB accelerates SOA by providing infrastructure services to complement business services.

What are these "infrastructure" services? They are a whole set of valuable services that you need to use over but should not have to write. These include routing, storing, and forwarding of messages, business activity monitoring, transformations and EAI functions. This is not rocket science as most enterprises contain common infrastructure services like domain controllers and directory services like LDAP or AD.

An ESB is a Common Messaging Fabric

In the ESB model, most or all applications and services in the enterprise connect to the ESB and communicate with

each other over the ESB. Applications and services usually connect using SOA standards, whereas legacy systems require integration via EAI technologies such as adapters. The communication between endpoints is handled by message-oriented middleware arranged in a bus topology. The primary advantage of such an approach is that it reduces the number of point-to-point connections required to allow applications to communicate. This, in turn, makes impact analysis for major software changes simpler and more straightforward. By reducing the number of points-of-contact to a particular application, the process of adapting a system to changes in one of its components becomes easier. [2]

 

The ESB serves as a common messaging fabric for the enterprise. Programs connect to the ESB and send or receive messages. The ESB handles routing details, mediation of differences between endpoints, and the physical details of communication. "It's far more sensible to put such matters in the hands of business analysts and I.T. personnel who can make enterprise-level decisions than having them controlled by developers at the application level. " [3]

Much of the value an ESB provides is in the area of centralized management. An ESB provides a single place to handle management functions such as configuration, deployment, monitoring, and control. Having a central facility like this makes change management straightforward and rapid response possible. Not having centralized management creates a significant problem for I.T. departments and imposes unnecessary cost and delays when change is required. [4]

An ESB is a Long-Term Architectural Pattern

A subject of much debate is whether an ESB is a pattern or product. The most obvious answer would seem to be "both": an ESB can certainly be described as an architectural pattern and there is more than one path to creating one. You have to build your ESB out of something however, so its natural that one or more products would be used to accelerate the process.

It is my feeling that the ESB is first and foremost a pattern. Like most patterns in this space, it is cataloged in Hohpe and Woolf's Enterprise Integration Patterns as Message Bus.  As such, an ESB for the long-term should be possible to survive incremental and generational changes in technology without having to throw away the pattern.

Indigo On the Way!

There is so much more I could and want to say about ESBs and I will return to look at example ESBs like Neuron, nServiceBus and Tibco later in the series. Next up, finally you may say, is looking at Indigo, Microsoft's programming API and Framework for (possibly) creating Service Oriented Architecture. My love affair with Indigo goes back four years now as a member of the SDR program, but we will return to the concepts in this article to suggest that powerful as Indigo is, it is low-level and one may take advantage of frameworks like nServiceBus and ESBs like Neuron (built on WCF) to avoid having to write a lot of the "plumbing" code yourself.

References

[1] http://en.wikipedia.org/wiki/Enterprise_service_bus

[2] http://en.wikipedia.org/wiki/Enterprise_service_bus

[3] Neuron ESB Whitepaper - "Understanding the Enterprise Service Bus" available at http://neuronesb.com/NeuronESB.pdf

[4] same

Thank You Virginia/Washington!

A most excellent turnout tonight at the Capital Area .NET UG tonight with lots of great questions on WCF, nServiceBus and Neuron. Presentation is here.

Links

More Posts Next page »

Search

Go

This Blog

News

    The content of this site are my own personal opinions and do not represent my employer's view in anyway.

    Profile for SamGentile

MVP

Blog Information Profile for SamGentile

Tags