Click here to Skip to main content
Click here to Skip to main content

Tagged as

Simple WCF web service to receive parameter from HTTP POST request body

, 25 Jan 2011
Rate this:
Please Sign up or sign in to vote.
Simple WCF web service to receive parameter from HTTP POST request body

One week ago, I started a new project to replace an old web service with the new one. The idea was to replace the old unmaintainable code with a brand new solution based on WCF. As we had to keep the old clients running, we needed to keep our new service able to response to HTTP POST requests. The request parameter had to be delivered in the body of the request. So I tried to find a simple example of how to build in Visual Studio 2010 WCF web service to receive parameter from HTTP POST request body. I found a lot of useful hints but not the complete sample. As I finally managed to compile my own solution, I'd like to share it.

1. Create a new project in Visual Studio based on "WCF Service Library" template.

2. Go to the project properties and change target framework to ".NET Framework 4".

3. Open App.config file and make the following changes:

 

- change base address to http://localhost:8000/

- replace endpoint section to

<endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="EchoService.IService1">

- add the following code under behaviors section:

<endpointBehaviors>
 <behavior name="webBehavior">
  <webHttp/>
 </behavior>
</endpointBehaviors>

4. Open IService1.cs file and replace its content with the following code:

using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.IO;
 
namespace EchoService
{
    [ServiceContract]
    public interface IService1
    {
        [WebInvoke(UriTemplate = "echo")]
        Stream HandleMessage(Stream request);
    }
}

5. Open Service1.cs file and replace its content with the following code:

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.IO;
using System.ServiceModel.Web;
 
namespace EchoService
{
    public class Service1 : IService1
    {
        public Stream HandleMessage(Stream request)
        {
            StreamReader reader = new StreamReader(request);
            string text = "EchoServer received: " + reader.ReadToEnd();
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            MemoryStream ms = new MemoryStream(encoding.GetBytes(text));
            WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
            return ms;
        }
    }
}

6. Start debugging. If everything is OK, then Visual Studio starts WCF Test Client. Now you can open your favorite test tool (I use Fiddler) and send a post request to http://localhost:8000/echo

7. In my case, I sent a word "test" as request and received back "EchoServer received: test".

Enjoy.

 

PS. As I couldn't post screenshots in the Tip&Tricks section I've published a version with them on my blog.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Igor Merabishvili
Software Developer (Senior)
Germany Germany
No Biography provided

Comments and Discussions

 
-- There are no messages in this forum --
| Advertise | Privacy | Mobile
Web04 | 2.8.140821.2 | Last Updated 25 Jan 2011
Article Copyright 2011 by Igor Merabishvili
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid