So, What Is This WCF Anyway?
Q: Steve, Microsoft has a lot of new technology, what’s special about WCF?
A: Everyone that I talk to wants their software to works well with other systems. Simply put, WCF is the tooling in Windows that makes that happen. It works with the Internet protocols that small business and consumer applications rely on, but it also meets the communication needs of complex enterprises. So WCF provides a feature that virtually everyone wants. As a software developer, you need to know that and be prepared to deliver.
Q: But if my application is just a web site, why would I need WCF?
A: It depends on what your site does. Say it’s a product catalog. You may want to allow customers to download portions of the catalog or subscribe to updates. So, using just a few lines of code, you can publish an “RSS feed”, which is the technology behind blogs, so that customers can easily get to your catalog from whatever device they choose. We have a chapter in the book called “Programmable Web” that covers this in detail. Chances are that the inventory data is maintained in another system so you need a secure, efficient way of pulling that information onto the site. But maybe your site also shows inventory levels along with the product catalog. Security is probably pretty important there since only the web site should be able to query the inventory system and you don’t necessarily need to use HTTP for the protocol and XML with angle brackets for the data. So I introduced 3 requirements: make it secure, use different protocol and use a different data format,
each of which WCF can handle pretty easily. So even though it’s “just a web site”, most web applications need to communicate with other systems.
Q: Are you describing “Web Services”. Is that what this is all about?
A: Bingo! Web Services are the common way for modern applications to communicate. But before you can communicate, you need to speak a common language. In the book, we have a chapter called “Contracts” that covers just this. There are “Data Contracts” that describe data entities and “Service Contracts” that describe operations you can perform. So, in a patient care system, there may be “patient”, “room” and “drug” entities and there may be “Admit”, “Allocate” and “Prescribe” operations. The contracts define the common language, which is all based on public internet standards like XSD and WSDL that have been around for quite a while.
Q: So WCF can describe the interface, but how about actually implementing the service?
A: Right, the service interface is just the tip of the iceberg; it defines what the service will do but not how. If the implementation is super simple, like an RSS feed that’s a thin wrapper over data, then there’s not much to do since you’re working with read-only, unsecured data that’s likely coming directly from a database. But what if you’re processing a transaction that debits your account and credits mine? In that case you’ll want control over committing or aborting the transaction. Or what if there’s something about your program that requires it to run as a singleton? In that case you’ll need to coordinate locks or threads somehow. Or what if you want to require digital certificates with each request? Again, you’ll need to figure that out. These items are all defined as “behaviors” in WCF and we have a whole chapter in the book devoted to that.
Q: This sounds a bit like workflow, with transactions and sequencing. Isn’t that what Workflow Foundation does?
A: Right - WF does workflow and WCF does services. One nice thing about WF is that you can host it anywhere: in SharePoint, in a client application, or in a WCF Service. And one of the nice things about WCF is that you can implement it with any .NET language: you can use c#, VB.NET or WF models. Putting these together, they really complement each other. You can build workflows and expose them as services, or you can define services and implement them as workflows. There’s some pretty good integration between WCF and WF built into .NET 3.5 and Visual Studio 2008.
Q: Now some questions for you Rich: What happened to .NET Remoting? Did it go away?
A: I hear this question a lot from developers that use .NET Remoting. To be clear, .NET Remoting has not gone away and is still supported in the .NET Framework so your OK if you already use it. However, going forward developers should build new distributed applications using WCF. WCF offers several ways of exposing services including a replacement for .NET Remoting. These take advantage of WCF “bindings” to get great performance from RPC-style programming.
Q: So is WCF better than .NET Remoting?
A: Well, .NET Remoting is a good technology, but WCF offers many new capabilities. For example, WCF offers the ability to host services over multiple communication mechanisms simultaneously. This means that you can expose services using Web Services for interoperability with other platforms such as Java as well as your .NET clients without the overhead of interoperability.
Q: I’ve heard that WCF supports build peer-to-peer applications, but much is written about that.
A: Absolutely! In my opinion this is one of the “unwritten” features of WCF. We actually dedicate a whole chapter called “Peer Networking” which covers features available in WCF and Vista for building peer-to-peer applications. We also cover what developers need to do to enable these applications on Windows XP.
Q: How should a .NET developer think about services?
A: Well that depends on the developer and what they are doing. For example, Enterprise developers typically want to expose some backend system using Web Services. They do this because Web Services support interoperability between heterogeneous systems found in enterprises today. Web developers on the other hand focus on services which work best from a browser which typically does not require the use of SOAP. Instead, they use technologies such as POX and JSON which work well from a browser.
Q: Chris, what is available to help diagnose WCF issues?
A: WCF includes a bunch of diagnostic features, extending those of the .NET Framework itself. By enabling message logging and system tracing, developers can see details of the actions taken by WCF as well as the messages sent between callers and services. In addition, WCF offers a utility, called the Service Trace Viewer, that can help visualize large amounts of data collected by these diagnostic features. Using the Service Trace Viewer, it’s possible to quickly identify problems areas in complex distributed WCF applications. Using these facilities makes it much easier to understand what’s going on under the hood.
Q: Steve, so what’s the best way to learn about WCF?
A: Well, that’s an easy one! There are a few books on the market today and most are pretty good. Our book covers the complete WCF stack but focuses mostly on what people need to know to get started, and what they need to know to become experts. We had the product team review the material so we think it’s the best out there. We’ve written it for .NET 3.5 so it’s as current as you can be. In addition to books, there’s plenty of content on MSDN and throughout the blogosphere.