I'm trying to define the integration architecture roadmap for my company and I'm looking for some guidance on my approach.
Most (90-95%) of our applications are based on .NET with Microsoft SQL Server 2008. We have sales cloud in Salesforce and planning to migrate more applications (to Force.com platform) Salesforce in the coming years. We bought IBM Cast Iron for integrating our on-premise applications with Salesforce and possibly within our on-premise applications. Now after analyzing the existing applications and the existing integration (ad-hoc - SQL jobs, windows services,...), I felt that we needed an ESB as I realized that we have multiple ways that we use to talk with the applications (FTP, Web Services, CSV/Excel, SQL). Though Cast Iron can take any type of formats and can talk Web Services, FTP, etc..., I'm concerned about positioning the Cast Iron as the core integration platform as this will become a broker architecture (similar to Hub and Spoke) that follows traditional EAI approach which may suffer from single point of failure and performance issues as the orchestrations increase.
By introducing ESB, I think I'll achieve at least the following benefits:
- Scalability
- Reliability
- High performance
The attached diagram reflects a simplified version of this scenario. This architecture can also be expanded in future by providing SOA over the ESB.

Now my concerns/questions are:
- Since Cast Iron is an orchestration tool, which one should I use for orchestrations? Is it Cast Iron or the ESB?
- Cast Iron can only talk to JMS/IBM MQ and cannot talk to Microsoft Messsage Queue. So, should we go with java based ESB like Mule (with Active MQ) or Service Mix?
- What are my options for .NET based ESB (other than Microsoft Biztalk and NServiceBus), which is reliable and most widely used?
- What's the best practice on bulk data movement? Usually, this can be done through SSIS. In our case, we may have to move bulk data to cloud on periodical basis.
- What's the best way to publish messages to JMS based message store from .NET applications?
I know I have asked many questions here and may or may not have direct answers. I would be glad to hear the views from the gurus.