We are considering Web services for some internal integration efforts. They seem to be a good (and less expensive?)...
alternative to other solutions, such as a messaging server. Can you give us some hints as to how to choose between using Web services and a message queue system?
First, let me make a foundational statement. Web services will not solve every business problem that we have today. Sometimes there are better alternatives. That said, here are some very basic guidelines to consider:
Web services are relatively simple and easy to implement. This is one of their strongest attributes. Most messaging service solutions are neither and they are usually considerably more expensive than a Web service-based solution. Intra-corporate integration may become the most common implementation of Web services in the short term.
Web services are a natural extension of the distributed computing model and can do a great job of tying disparate systems together. Because Web services are based on open standards and protocols such as SOAP and TCP, most platforms today can implement them fairly easily. If you have a J2EE application that already has functionality that you need in your new .NET application, don't duplicate it. Use Web services to call the Java application directly from .NET.
When wouldn't I recommend Web services in this scenario? Web Services are currently lacking two key capabilities that can be a strong point of a message queue server. First, they have no inherent support for transactions. Most message queue systems have good transaction support and even support transactions across multiple data sources. If this type of cross-application transaction support is key to your implementation, then choose a message queue service.
Second, message queues allow guaranteed delivery. In their current incarnation, Web Services do not. Since messages can be sent asynchronously (fire and forget) with a message queue service, it is vital that the message be guaranteed to eventually arrive at its destination. Hence the idea of message "queues".
In the end, you need to carefully delineate your business needs and prioritize them. Include not only the technical details, but also keep in mind maintenance, support and Total Cost of Ownership.