Welcome to MSDN Blogs Sign in | Join | Help

Welcome to The Metaverse

Navigating the service-oriented, identity aware metaverse

News

  • Disclaimer:
    The content of this blog are my own personal opinions and do not necessarily represent Microsoft's position, commitments or strategy. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.




    Add to Technorati Favorites
On SOA, Indigo and Services

John Cavnar Johnson posted an article entitled "Taking up the Turner Challenge or Once more into the breach" where he takes up the challenge I laid out in one of my recent posts on SOA. In my post, I ask (in reference to vendor's claims that they have a SOA): "if you've got an architecture that will help solve real business problems, then show me the picture. Don't list products to me - show me the generally applicable architecture and principles which drive that architecture". When I wrote this, I should have been clearer and stated something more like "if you're a technology products company and you have a Service Oriented Architecture that will help solve real business problems, then show me the picture. Don't list products to me - show me the generally applicable architecture and principles which drive that architecture".

My original challenge was based on my frustration that so many companies offering products of all kinds are making statements that such-and-such a product is a SOA. The height of this lunacy for me was when I recieved a press-release from a company proudly announcing their "SOA Identity Management solution". Huh? A what???

John points out that as an Enterprise Architect, he models his enterprise along Service Oriented principles and enjoys great benefits from doing so. As such, he therefore has a SOA - a Service Oriented Architecture. By following the principles of SO, he enjoys loose coupling, better interop and has an easier time communicating what a given part of a system does to the business. I don't quite concur with his assertion that services in a SOA must communicate using asynchronous messages, but will totally agree that by doing so, a system may exhibit improved scalability, performance, etc.

John then goes on to say that he feels we've got it all wrong with Indigo. He feels that we get in the way too much and that "this enormous pile of OO attribute-driven goo"obscures his view of the world. He asks why we can't just create programming constructs that let him create messages and send them. Huh?We can and we do. You create a data structure that you've adorned with the attributes necessary to describe the construct to the world and you then send it via your binding of choice to the destination endpoint.Your binding is then responsible for signing & encrypting, communicating reliably, serializing and transporting the message.

He also complains that we force him to have to understand too much about pointy brackets, transports, WSDL, etc.I have posted previously On Contract First & Pointy Brackets in general and agree that we should get away from pointy bracketed considerations as much as possible, but I don't understand why he says that if you want to use Indigo you have to process XML, WSDL and SOAP. In fact, Indigo enables you to represent and consume messages encoded in XML or Binary-Encoded-XML out of the box, and if you want to represent your messages in other formats, then go ahead and write/buy an Indigo serializer that uses the format that makes sense to you.

John also complains that he doesn't want to "slurp another service's operations and messages directly into my object model". Fine. if you'd rather do the work of independently creating message structures which are wire-compatible with other endpoints by hand rather than using a tool to do the work for you then go ahead. You can start from a contract defined in WSDL. WSDL is generally used because it is very expressive and is the most interoperable contract definition language around right now, although it is indeed somewhat flawed and often a little inconsistent. You can then use a tool that we provide that spits out skeleton or proxy classes mapping agains the WSDL (and associated XSD) simplifying the task of implementing the service or the callers of the service. You don't want to use WSDL? Then design your own contract definition language and proxy/stub generator - this is all perfectly feasible.

If you want message-oriented view of the world, we will get out of your way and give you an almost totally unobscured view of the world if you want us to. If you prefer a more object-oriented view of the world, then we give that to you too. You want to mix and match both world views, go ahead, no problem.

But herein lies an important point. OO is still an extremely effective way of constructing complex systems, and is absolutely applicable for use when constructing the inner workings of a service. The OO constructs and metaphors use expose with Indigo in VB.NET, C# and C++ are largely born from the fact that these are OO languages and we're trying to expand the OO world's experience into the realms of Services when constructing distributed systems. Will there, at some time in the future be SO programming languages? Maybe, but until then, let's try and get to a point where developers don't have to re-skill and re-tool any more than they're already expected to in order to adopt powerful new metaphors such as SO.

 

 

Posted: Monday, May 09, 2005 6:24 PM by RichTurner666

Comments

Message for you, sir! said:

# May 9, 2005 10:12 PM

Brain.Save() said:

# May 10, 2005 1:57 AM

Jochen Fromm said:

OO and SO are not a contradiction. SO encapsulates OO. Functions can be used to create objects and objects to create services. Another form of programming are agents: agents can be used to create societies, but they need a suitable environment.

A message-oriented view of the world is not new. Windows is a message-oriented OS, which was originally not object-oriented at all. The core of each program for Microsoft Windows is the message loop: while (!GetMessage(...)) { ProcessMessage(...) }

In the OO view, messages are "replaced" and described by events, event-handling and delegation. In modern integrated development environments like Visual Studio you do not see the underlying messages, you only edit events and event handlers.

Many attempts of the Web Services Acronym Hell, BPEL or BPEL4WS, BPDM, BPMN, BPML, WSFL, WSCI, WSCL and WS-CDL were meant to enable SO programming, through web services composition and orchestration. Yet there is no common standard, and even a common standard does not solve all problems.

Most approaches for the modeling or creation of business process workflows have a drawback: they focus on cross- and inter-organizational workflows. It is doubtful that mobile agents or information will easily move across many organizational borders, or that completely new forms of virtual enterprises will suddenly emerge out of the "sea of services" on the Internet.
# May 10, 2005 5:54 AM

That Other Dude said:

What constitutes an SOA?

A simplistic architecture that might come "close" to this is an unnamed company that has operations around the world and field technicians around the world. These field technicians work in a disconnected manner. They launch a ClickOnce application which connects to their lan and retrieve information from a web service that they need. This information m ay include information about operations what they do and also includes information about how the application will function - so the application is somewhat upgradeable and extensible without actually deploying a new update.

They then disconnect and go out into the field using this inforamtion and collecting more information. When they come back they reconnect and submit their data to web services so that the data can be validated and joined with the rest of the system.

Does this sound like a simple SOA ?

To my understanding of SOA while being extremely simple this would be the basics of an SOA.

Some of the biggest hurdles in something like this is that often times data structures that are used by both ends contain shared logic which is encapsulated in objects which represent the information. Of course with web services this shared logic is not capable of happening and thus you are forced to rewrite the logic and use wrapper objects which for lack of better terminology have to be wrapped over data passed through the web service.

Is this a scenario that is better resolved with .NET Remoting? I would honestly probably be the last person to accurately tell you whether it was or not. For this SOA web services were chosen because of the quick realization of a communication and interoption. The limitation of only using HTTP, working with multiple platforms which inclue mobile devices and the need to work in a disconnected model helped put the push towards Web service as opposed to using something else.
# May 16, 2005 7:39 AM
Anonymous comments are disabled
Page view tracker