Click here to Skip to main content
15,897,291 members
Articles / Programming Languages / C#
Tip/Trick

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

Rate me:
Please Sign up or sign in to vote.
4.57/5 (3 votes)
25 Jan 2011CPOL1 min read 35.9K   2  
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)


Written By
Software Developer (Senior)
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
-- There are no messages in this forum --