Dave,
You've just jump into highly volatile and complex topic. People have
been having heated debates about SOA for years now and there is still
no great consensus on what exactly it is or how it's best be
implemented. There are a ton of information pieces out there about how
to design services and implement an SOA and the amount of information
they contain is way more than I can reasonably fit in here. What I will
try to suggest is a couple of good starting points for you.
The first thing I'll stress is that "web services" do not equal
services or SOA. When we talk about SOA, we are talking about a whole
range of things such as contract-first-design, chatty versus chunky
design, services providers, dynamic discovery of services, enterprise
service buses etc. Also, SOA refers to an architecture involving
multiple applications and really shouldn't be used within the confines
of a single application. With web services, we are really just talking
about a open standards based remoting technology that allows different
systems to easily communicate with one another. Sure, web services are
one of the major building blocks of SOA, but they are only that, a
building block.
If you are looking a good start on how to design a distributed system
that uses web services to connect different layers, I will recommend
the MSDN patterns and practices documents. A lot of work has been put
into these documents and describe all kinds of best practices for build
and developing distributed systems that use web services. The first
document I'd start with is
http://msdn.microsoft.com/practices...px?pull=/library/en-us/dnbda/html/distapp.asp
Its a great reference and since you are familiar with 3-tier design,
this document will be fairly easy to understand. It should help answer
your question about database access from different tiers. I'd also
recommend that your check out the articles in the "application
integration and web services" section.
http://msdn.microsoft.com/practices/apptype/appinteg/default.aspx
If you are looking for documents on SOA, I'll just recommend reading
articles from as many different authors as you can. There are so many
different opions about this beast, that you'll need to rely on more
than just one source in order to develop an informed opion of your own.
As to my personal opinion about your design, I wouldn't have my web
services access the db directly. I'd keep the data access layer as the
single entry point into the database and I'd design web services to sit
on top of business components that access this data access layer. I.e.
Presentation -> Web Services -> business facade -> data access
components -> db.
Good luck
Peter Kelcey