OK, I am about to design a large application in .NET that replaces a legacy application. The legacy application is developed in VB and is a client/server product. There is a thick client GUI application and there are multiple modules that are part of that client and also there is a set of components that run in a remote machine in a centralized way hosting some business logic and access to the central DB. I want to reengineer the whole app in .NET leveraging SOA. I have the following questions:
1. I will have a browser client and centralize everything as independent components running on the server-side. So according to SOA should all my components interact with each other using XML/WebServices? Is it not a performance problem?
2. I want to design the app in such a way that my UI becomes just one primary client and I can possibly expose those services to external applications of my customers/partners. How to do so in .NET. Is there a simple example that explains this pattern?
3. Are XOP & MTOM supported by .NET? If so, are they enabled by default or is there something that the developers need to worry about?
4. They say that RPC-style descriptions should be avoided and document-style SDL should be used. But I want to abstract the data level information and expose services as abstract operations, so what exactly is the guideline here?
5. Also, if SOA has to be taken as a concept and if I have to design SOA in mind but not necessarily just expose as webservices, what are the example design patterns I should use (please provide names)?
6. Are there any tools in .NET (or even let us say any other platform) that help SOA design/development leaving aside the webservices based approach?
7. When I design this SOA app in .NET, how do I do orchestration or choreography in future, does Microsoft provide any tools to do that or are there separate products that I need to buy?
8. Assuming that I expose my services using webservices, how do I incorporate security? Is there some form of automated integration into the Active Directory?
9. Again assuming that I expose my services using webservices, what special care should I take so that my partners/customers who use Java can also talk to my services? Is the WS-I thing a infrastructure product's concern (in this case IIS, maybe) or is it a programmer's concern?
I know some of the questions are about the SOA concept and others are implementation level ones, but these are the questions I got even after reading about SOA and WebServices. Recommending a book could be an easy answer but practical answers to the above will surely help all the readers of this post, including me.