How to send request from CURL command tool to wcf reset service

In this post,I will show you how to test your rest service from command prompt using CURL tool.
What is CURL:A command line tool for getting or sending files using URL syntax.

For this demo I have created a simple reset service which contains three method as below

Download Source Code

[ICurlService]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;


[ServiceContract(SessionMode = SessionMode.NotAllowed)]
public interface ICurlService
{
    [WebGet(UriTemplate = "date/{year}/{month}/{day}", ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string GetDate(string day, string month, string year);

    [WebGet(UriTemplate = "greet", ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    string Greeting();

    [WebInvoke(Method = "POST", UriTemplate = "submit", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    [OperationContract]
    string Save(string data);

}
[ServiceType]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

public class ServiceType : ICurlService
{
    public string GetDate(string day, string month, string year)
    {
        return new DateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day)).ToString("dddd, MMMM dd, yyyy");
    }
   public string Greeting()
    {
        return "Hello World";
    }
   public string Save(string data)
   {
       return data + "Has been saved!";
   }
}

Let's send request to first method


 [WebGet(UriTemplate = "date/{year}/{month}/{day}", ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string GetDate(string day, string month, string year);

Go to command prompt and type following code

curl http://localhost:12576/CurlDemo/Service.svc/date/2012/1/12

Let's send request to second method from curl



  [WebGet(UriTemplate = "greet", ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    string Greeting();


curl http://localhost:12576/CurlDemo/Service.svc/greet

Now,let's send a post request to service from command prompt




  [WebInvoke(Method = "POST", UriTemplate = "submit", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    [OperationContract]
    string Save(string data);


curl  -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"data":"dummy data"}' http://localhost:12576/CurlDemo/Service.svc/submit


How to call python generator in c#

In this post,I will show you how to call python generator in c#.Create a console Application and then right click on the project and add new file fib.py and add following code
class Fib:

    def __init__(self,num):

        self.a=0

        self.b=1

        self.num=num

        self.index=0

    def __iter__(self):

        return self

    def next(self):

        if self.index > self.num:

            raise StopIteration

        else:

            self.index +=1

            self.a,self.b=self.b,self.a+self.b

            return self.a

Open Progrm.cs and add following code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Scripting.Hosting;
namespace IronPython_Tut1
{
        class Program
    {
        static void Main(string[] args)
        {
        //Create runtime
            ScriptRuntime runtime = IronPython.Hosting.Python.CreateRuntime();
        //excute 
            ScriptScope scope = runtime.ExecuteFile(@"Fib.py");
        //get the Fib object
            dynamic Fib = scope.GetVariable("Fib");
        foreach (var item in Fib(10))
            {
                Console.WriteLine(item);
            }
          
        }
    }
}


How to call python class in c#

In this post,I will show you how to call python class in c#,Create a new python class named Person.py and paste following code


class Person:
    def __init__(self,firstName,lastName,age):
        self.firstName=firstName
        self.lastName=lastName
        self.age=age
   
    def __str__(self):
        return self.firstName +","+self.lastName+","+self.age
    def get_full_name(self):
        return "%s,%s" % (self.firstName, self.lastName)
   
   


Open program.cs and add following code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Scripting.Hosting;
namespace IronPython_Tut1
{
    class Program
    {
    static void Main(string[] args)
        {
    //Create runtime
            ScriptRuntime runtime = IronPython.Hosting.Python.CreateRuntime();
    //excute 
            ScriptScope scope = runtime.ExecuteFile(@"Person.py");
    //get the Person object
            dynamic Person = scope.GetVariable("Person");
    //Create instanc of Person class.
            dynamic personObject = Person("santosh", "singh", 24);
    //call  the get_full_name method on person instancw
            Console.WriteLine(personObject.get_full_name());
            Console.ReadLine();
        }
    }
}

IronPython and C#


What is IronPython

IronPython is an open-source implementation of the Python programming language which is tightly integrated with the .Net Framework.
IronPython can use the .Net Framework and python libraries,and other .NET languaages can use Python code just as easily

In this post I will show you how to call Python method in c#.


Create a new Console application and visual studio
Right click on the project and click on Manage Nuget Packages and search for IronPython

After installing IronPython import following namespaces
using Microsoft.Scripting.Hosting;

Right click on project and add new file Calculator.py and add following python code


def add(a,b):
    return a+b

Open Program.cs file and add following code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Scripting.Hosting;
namespace IronPython_Tut1
{
    class Program
    {
    static void Main(string[] args)
        {
    //Create runtime
            ScriptRuntime runtime = IronPython.Hosting.Python.CreateRuntime();
    //excute 
            dynamic scope = runtime.ExecuteFile(@"Calculator.py");
    //call the python method
            Console.WriteLine("Sum={0}", scope.add(1, 2));
            Console.ReadLine();
        }
    }
}

How to implement twitter search in asp.net

In this post,I will show you how to implement twitter search in asp.net.In this project,I am using following things




<a href="http://search.twitter.com/search.json" target="_blank">Twitter search Api</a>
<a href="http://jquery.com/" target="_blank">Jquery</a>
<a href="http://handlebarsjs.com/" target="_blank">Handlebars jquery template</a>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Twitter.aspx.cs" Inherits="Twitter" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        body
        {
            width: 600px;
            margin: auto;
        }
        .tweets
        {
            list-style-type: none;
        }
        img
        {
            float: left;
            padding-right: 1em;
        }
        a
        {
            text-decoration: none;
        }
    </style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    <script src="Scripts/Handlebars.js" type="text/javascript"></script>
    <script type="text/javascript">
    var Twitter =
         {
             init: function () {
    this.url = "http://search.twitter.com/search.json?q='" + $("#txtSearch").val() + "'&callback=?";
    this.template = $("#template").html();
    this.fetch();
             },
             fetch: function () {
    var self = this;
                 $.getJSON(this.url, function (data) {
                     self.tweets = $.map(data.results, function (tweet) {
    return {
                             author: tweet.from_user,
                             tweet: tweet.text,
                             thumb: tweet.profile_image_url,
                             url: 'http://twitter.com/' + tweet.from_user + '/status/' + tweet.id_str
                         };
                     });
                     self.parse();
                 });
             },
             parse: function () {
    var template = Handlebars.compile(this.template);
    var container = $(".tweets");
                 container.append(template(this.tweets));
             }
         };
        $(document).ready(function () {
            $("#btnSearch").click(function () {
                Twitter.init();
            });
        });
    
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type="text" id="txtSearch" /><br />
        <input type="button" id="btnSearch" value="Search" />
        <ul class="tweets">
            <script type="text/x-handlebars-template" id="template">
            {{#each this}}
            <li>
            <img src="{{thumb}}" alt="{{author}}"></img>
            <p><a href="{{url}}"> {{tweet}} </a></p>
            </li>
            {{/each}}
       
    </script>
    </ul>
    </div>
    </form>
</body>
</html>

You can download the complete source code from below git location
code

Passing complex objects into a WCF Rest Service

In this post,I will show you how to pass complex json data from jquery to wcf service.
  • Create a new website in visual studio.
  • Add a new item wcf service named BlogService and replace the existing code with following
IBlog.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;

[ServiceContract]

public interface IBlog
{
    [WebInvoke(UriTemplate = "blogs", Method = "POST",
            BodyStyle = WebMessageBodyStyle.WrappedRequest,
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    string SubmitBlock(Blog blogs);
}
IBlogService.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;

[ServiceBehavior]


public class BlogService : IBlog
{


    List<Blog> _blogs = null;
    [OperationBehavior]
    public string SubmitBlock(Blog blogs)
    {
        //Process your data.
    }
}
[DataContract]
[KnownType(typeof(BlogPost))]
public class Blog
{
    [DataMember]
    public string BlogID { get; set; }
    [DataMember]
    public string Title { get; set; }
    [DataMember]
    List<BlogPost> Blogs { get; set; }
}
[DataContract]
public class BlogPost
{
    [DataMember]
    public string BlogPostID { get; set; }
    [DataMember]
    public string BlogID { get; set; }
    [DataMember]
    public string BlogContent { get; set; }
}
  • Open web.config and made highlighted changes

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Service1Behavior" name="BlogService">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="EnableScript"  contract="IBlog">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>

        <behavior name="EnableScript">
          <webHttp></webHttp>

        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="Service1Behavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
  </system.serviceModel>
</configuration>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
   <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script type="text/javascript">

        var DTO =
    {
        "BlogID": "1",
        "Title": "Aspdotnetcodebook",
        "Blogs": [
            {
                "BlogPostID": "1",
                "BlogID": "1",
                "BlogContent": "This is my first post"
            },
            {
                "BlogPostID": "2",
                "BlogID": "1",
                "BlogContent": "This is my second post"
            }
        ]
    };


        var blogs1 = {blogs: DTO };
        $(document).ready(function () {

            $.ajax(
            {
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                processdata:false,
                data:JSON.stringify(blogs1),
                url: "http://localhost:6548/Blog/BlogService.svc/blogs",
                success: function (data) {
                    alert(data);
                }
            }
            );
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    </div>
    </form>
</body>
</html>
Complete source code