This example demonstrates how to get the current logged in windows user by using an ASP.NET Web Form named “MyWebForm.aspx” and a code behind page named “MyWebForm.aspx.cs”. The Web Form has a single text box control named “TextBox1”. “this” represents System.Web.UI.Page, which has a public instance variable named “Request” of type System.Web.HttpRequest.
using System;

Imagine you have a web service. The web service is configured to use the POST method and it’s configured to accept JSON requests and responses. The web service accepts a ‘Product’ object as the input parameter. The web service simply gets the ‘Name’ attribute of the ‘Product” and returns it as a string. I know that this web service is useless, but it works as a simple example.

Here is the definition for the ‘Product’ class. You need to create a ‘Product.cs’ class in the project where the ‘CallService<T>’ method is being called:

public class Product{

public int ID { get; set; }
public string Name { get; set; }

}

You need to add the following references to your project and add the following code at the top of the file where ‘CallService<T>’ is defined:

using System;
using System.Text;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

Here is the definition of the ‘CallService<T>’ method:

// <T> needs to specify the return type of the web service
public T CallService<T>(string webServiceUrl, object param){

object result = new object(); //this is the object that will be returned by CallService<T>
string jsonString = new JavaScriptSerializer().Serialize(param); //get Json string representation of object
//Console.WriteLine(jsonString); //display the json encoded string (if you are using a console application)

reqStream.Write(postData, 0, postData.Length); //send the input data to the web service

}
using (WebResponse response = request.GetResponse()) {

string jsonResult = new StreamReader(response.GetResponseStream()).ReadToEnd(); //get the Json string from the web service response
result = new JavaScriptSerializer().Deserialize<T>(jsonResult); //convert the Json string to a c# object of type T, then cast it as an object

}
return (T)result;

}

Here is an example call. Please note that you need to change ‘<string>’ so that it matches the return type of your web service:

This is how I convert a C# object to a Json string, send it to a web service, get a Json string response from the web service, and convert the Json string back into a C# object. I’m new at this, so I may be performing unnecessary steps …but it works.

You can get detailed instructions for creating the WCF web service that I use in this example. CLICK HERE FOR DETAILS.

WebResponse response = request.GetResponse(); //get the response from the web service
string result = new StreamReader(response.GetResponseStream()).ReadToEnd(); //get the Json string from the web service response
CompositeType resultCompositeType = new JavaScriptSerializer().Deserialize<CompositeType>(result); //convert the Json string to a c# object (Car)
Console.WriteLine(resultCompositeType.StringValue); //demonstrate that the object was successfully converted and contains data from the web service

Press Ctrl + F5 to run the program in Visual Studio. If the program is working correctly then a cmd.exe window should open and you should see the text returned from the web service: ‘here is my string value’.

This will require 4 main components: MyService.svc, MyService.svc.cs, IMyService.cs, Web.config. For me, the Web.config endpoint configuration is the only component that is not straight forward. If you want to view the markup of the MyService.svc file, then: Solution Explorer -> right click MyService.svc -> View Markup.

Lets get started creating the project.

In Visual Studio: FILE -> New -> Project -> WCF Service Application. I entered ‘MyNamespace’ in the ‘Name:’ textbox and clicked the ‘OK’ button.

In the Solution Explorer area, right click IService.cs and rename it ‘IMyService’. Choose ‘Yes’ if the Visual Studio message box promps you to change all references. If you are not prompted, then open IService.cs, right click the ‘IService’ in ‘public interface Iservice’ then: Refactor -> Rename. Then enter ‘IMyService’ in the ‘New name:’ textbox and click the ‘OK’ button.

In the Solution Explorer area, right click Service1.svc and rename it ‘MyService’. Choose ‘Yes’ if the Visual Studio message box promps you to change all references. If you are not prompted, then open Service1.cs, right click the ‘Service1’ in ‘public class service1 : IMyService’ then: Refactor -> Rename. Then enter ‘MyService’ in the ‘New name:’ textbox and click the ‘OK’ button.

Open MyService.svc.cs, delete the existing GetData method and paste the following code in it’s place:

public string GetData(string value){

return string.Format(“You entered: {0}”, value);

}

public CompositeType GetJsonDataUsingDataContract(){

return new CompositeType();

}

We will be running the code next, so you need to know the project url that will be used. Go to Solution Explorer -> right click MyNamespace -> Properties -> Web -> Project Url. Copy the url.

Press Ctrl + F5 to run the web service. Paste the url you copied, followd by ‘MyService.svc/GetData/hello world’, into the a browser and you should see the result that gets returned by the web service. Paste the url you copied, followd by ‘MyService.svc/GetJsonDataUsingDataContract’, into the a browser and you should see the Json result that gets returned by the web service.