WCF Simplified Part 1: Getting Started with WCF 4 and Visual Studio 2010
May 24, 2010 9 Comments
1. Create a WCF Service Library in Visual Studio 2010 (run as Administrator),
2. Visual Studio will create a template for us that includes a ServiceContract with OperationContracts, and a DataContract with DataMembers. This is enough to get started,
[ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); } [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } }
3. We now have a WCF service library containing our contracts – definitions on how data will be exchanged with clients. If you build the solution using F6 and look at the bin/Debug folder you’ll see WcfServiceLibrary1.dll. We will have to host this dll in a process so that we can interact with it. Visual Studio 2008 and 2010 both include a WCF Test Client, which you can see by running the solution using F5,
Now click on GetData() on the left table view, enter a number in the Value field and click the Invoke button,
If you see this, just click OK,
In the respose, you’ll see “You entered: [your number]”, this shows that your WCF service library is working correctly.
4. For more flexibility, you’ll want to write your own application to host the service dll. To do this add a new Project to the solution (a console application),
5. In the ConsoleApplication1 add a project reference to the WcfServiceLibrary1,
And also a reference to the System.ServiceModel,
6. Your solution should look like this,
7. Now change the Main method to,
static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary1.Service1), new Uri("http://localhost:8000/HelloWCF"))) { // Set up a service endpoint [Contract, Binding, Address] host.AddServiceEndpoint(typeof(WcfServiceLibrary1.IService1), new BasicHttpBinding(), "HelloWCF"); // Enable metadata exchange ServiceMetadataBehavior smb = new ServiceMetadataBehavior() { HttpGetEnabled = true }; host.Description.Behaviors.Add(smb); host.Open(); Console.WriteLine("Ready..."); Console.ReadLine(); } }
8. Now set the ConsoleApplication1 as the StartUp Projectand run using F5. We are now actually hosting the WCF
service library at two addresses,
1. http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/ (the default created by Visual Studio as defined in the App.config file)
2. http://localhost:8000/HelloWCF (we created this service endpoint)
9. Let’s create a test application to interact with the WCF service, open a new instance of Visual Studio 2010, and create a console application,
10. In this new project, we need to add a service reference that points to the hosted WCF app we created in steps 1-8. So start the previous solution and browse to http://localhost:8000/HelloWCF to make sure the address is accessible, then add a service reference,
11. Now you should be able to add this code to the Main method to call the WCF service,
static void Main(string[] args) { // Create an endpoint EndpointAddress epoint = new EndpointAddress("http://localhost:8000/HelloWCF/HelloWCF"); ServiceReference1.IService1 proxy = ChannelFactory<ServiceReference1.IService1>.CreateChannel(new BasicHttpBinding(), epoint); using (proxy as IDisposable) { // Call the WCF service using the proxy string str = proxy.GetData(42); Console.WriteLine(str); } Console.ReadLine(); }
Pingback: WCF Simplified Part 2: Message Exchange Patterns (MEPs) « I.Net
Pingback: WCF Simplified Series « I.Net
Pingback: WCF Simplified Part 3: Using the WCF Duplex MEP « I.Net
Pingback: WCF Simplified Part 4: Comparing the Request/Reply and One-Way Patterns « I.Net
Pingback: WCF Simplified Part 5: Handling Exceptions and Faults « I.Net
It is important to note that in the host console app, you have the endpoint defined like this:
ServiceHost host = new ServiceHost( typeof( HelloWCF), new Uri( “http://localhost:8000/HelloWCF” ) )
whereas in the client console app, you need to also specify the endpoint that you added to that service, which was the same as the service itself.
EndpointAddress epoint = new EndpointAddress(“http://localhost:8000/HelloWCF/HelloWCF”);
Wonderfully simple illustration of WCF. It allows you to play with the concepts and see the resulting errors.
I did change the service name to “WCFService.Service1” to avoid the confusion between the HelloWCF namespace. in the URI.
Awesome blog! Is your theme custom made or did you download it from somewhere?
A theme like yours with a few simple tweeks would really make my blog jump
out. Please let me know where you got your design.
Thanks