WCF Simplified Part 1: Getting Started with WCF 4 and Visual Studio 2010
May 24, 2010 6 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”);