blob: 7bfdd1002d6ec95e19c20a9b72d9a7c42d4e4a00 [file] [log] [blame]
<%@ WebHandler Class="JayrockWeb.DemoService" Language="C#" %>
namespace JayrockWeb
{
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Collections.Specialized;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using Jayrock.JsonRpc;
using Jayrock.JsonRpc.Web;
[ JsonRpcHelp("This is a JSON-RPC service that demonstrates the basic features of the Jayrock library.") ]
public class DemoService : JsonRpcHandler, IRequiresSessionState
{
[ JsonRpcMethod("echo", Idempotent = true)]
[ JsonRpcHelp("Echoes back the text sent as input.") ]
public string Echo(string text)
{
return text;
}
[ JsonRpcMethod("echoObject", Idempotent = true)]
[ JsonRpcHelp("Echoes back the object sent as input.") ]
public object EchoOject(object o)
{
return o;
}
[ JsonRpcMethod("echoArgs", Idempotent = true)]
[ JsonRpcHelp("Echoes back the arguments sent as input. This method demonstrates variable number of arguments.") ]
public object EchoArgs(params object[] args)
{
return args;
}
[ JsonRpcMethod("echoAsStrings", Idempotent = true)]
[ JsonRpcHelp("Echoes back the arguments as an array of strings. This method demonstrates working with variable number of arguments.") ]
public object EchoAsStrings(params object[] args)
{
string[] strings = new string[args.Length];
for (int i = 0; i < args.Length; i++)
{
if (args[i] != null)
strings[i] = args[i].ToString();
}
return strings;
}
[ JsonRpcMethod("echoGuid", Idempotent = true)]
[ JsonRpcHelp("Echoes back the given GUID. This method demonstrates working with an argument typed as System.Guid.") ]
public Guid EchoGuid(Guid id)
{
return id;
}
[ JsonRpcMethod("sum", Idempotent = true)]
[ JsonRpcHelp("Return the sum of two integers.") ]
[ JsonRpcObsolete("Use the total method instead.") ]
public int Sum(int a, int b)
{
return a + b;
}
[ JsonRpcMethod("getStringArray", Idempotent = true)]
[ JsonRpcHelp("Returns an array of city names. Demonstrates returning a strongly-typed array.") ]
public string[] GetCities()
{
return new string[] { "London", "Zurich", "Paris", "New York" };
}
[ JsonRpcMethod("now", Idempotent = true)]
[ JsonRpcHelp("Returns the local time on the server. Demonstrates how DateTime is returned simply as a string using the ISO 8601 format.") ]
public DateTime Now()
{
return DateTime.Now;
}
[ JsonRpcMethod("newGuid", Idempotent = true)]
[ JsonRpcHelp("Generates and returns a GUID as a string.") ]
public Guid NewGuid()
{
return Guid.NewGuid();
}
[ JsonRpcMethod("cookies", Idempotent = true)]
[ JsonRpcHelp("Returns the cookie names seen by the server.") ]
public HttpCookieCollection Cookies()
{
return Request.Cookies;
}
[ JsonRpcMethod("serverVariables", Idempotent = true)]
[ JsonRpcHelp("Returns the server variables collection at the server. Demonstrates returning NameValueCollection.") ]
public NameValueCollection ServerVariables()
{
return Request.ServerVariables;
}
[ JsonRpcMethod("getAuthor", Idempotent = true)]
[ JsonRpcHelp("Returns information about the author. Demonstrates how a Hashtable from the server is automatically converted into an object on the client-side.") ]
public IDictionary GetAuthor()
{
Hashtable author = new Hashtable();
author["FirstName"] = "Atif";
author["LastName"] = "Aziz";
return author;
}
[ JsonRpcMethod("getCouple", Idempotent = true) ]
[ JsonRpcHelp("Returns a server-typed object representing a couple. Demonstrates to returning server-typed objects.")]
public Marriage GetCouple()
{
return new Marriage(
new Person("Mickey", "Mouse"),
new Person("Minnie", "Mouse"));
}
[ JsonRpcMethod("swapNames", Idempotent = true)]
[ JsonRpcHelp("Swaps first and last name of person. Demonstrates receiving and returning a server-typed object.")]
public Person SwapPersonNames(Person p)
{
return p == null ? new Person() : new Person(p.LastName, p.FirstName);
}
[JsonRpcMethod("getDataSet", Idempotent = true)]
[ JsonRpcHelp("Returns the Northwind employees as a DataSet.") ]
public DataSet GetEmployeeSet()
{
using (SqlConnection connection = new SqlConnection(ConfigurationSettings.AppSettings["NorthwindConnectionString"]))
{
SqlDataAdapter a = new SqlDataAdapter();
a.SelectCommand = new SqlCommand("SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Notes, ReportsTo, PhotoPath FROM Employees", connection);
DataSet ds = new DataSet();
a.Fill(ds, "Employee");
return ds;
}
}
[ JsonRpcMethod("getDataTable", Idempotent = true)]
[ JsonRpcHelp("Returns the Northwind employees as a DataTable.") ]
public DataTable GetEmployeeTable()
{
return GetEmployeeSet().Tables[0];
}
[ JsonRpcMethod("getRowArray", Idempotent = true)]
[ JsonRpcHelp("Returns the Northwind employees as an array of DataRow objects.") ]
public DataRow[] GetEmployeeRowArray()
{
return GetEmployeeSet().Tables[0].Select();
}
[ JsonRpcMethod("getRowCollection", Idempotent = true)]
[ JsonRpcHelp("Returns the Northwind employees as a DataRowCollection.") ]
public DataRowCollection GetEmployeeRows()
{
return GetEmployeeSet().Tables[0].Rows;
}
[ JsonRpcMethod("getDataView", Idempotent = true)]
[ JsonRpcHelp("Returns the Northwind employees as a DataView object.") ]
public DataView GetEmployeeView()
{
return GetEmployeeSet().Tables[0].DefaultView;
}
[ JsonRpcMethod("getFirstDataRow", Idempotent = true)]
[ JsonRpcHelp("Returns the first Northwind employee as a DataRow object.") ]
public DataRow GetFirstEmployeeRow()
{
return GetEmployeeSet().Tables[0].Rows[0];
}
[ JsonRpcMethod("getFirstDataRowView", Idempotent = true)]
[ JsonRpcHelp("Returns the first Northwind employee as a DataRowView object.") ]
public DataRowView GetFirstEmployeeRowView()
{
return GetEmployeeSet().Tables[0].DefaultView[0];
}
[ JsonRpcMethod("getDropDown", Idempotent = true)]
[ JsonRpcHelp("Returns a data-bound DropDownList to the client as HTML.") ]
public Control EmployeeDropDown()
{
DropDownList ddl = new DropDownList();
DataSet ds = GetEmployeeSet();
ds.Tables[0].Columns.Add("FullName", typeof(string), "FirstName + ' ' + LastName");
ddl.DataSource = ds;
ddl.DataMember = "Employee";
ddl.DataTextField = "FullName";
ddl.DataValueField = "EmployeeID";
ddl.DataBind();
return ddl;
}
[ JsonRpcMethod("getDataGrid", Idempotent = true)]
[ JsonRpcHelp("Returns a data-bound DataGrid to the client as HTML.") ]
public Control EmployeeDataGrid()
{
DataGrid grid = new DataGrid();
grid.DataSource = GetEmployeeSet();
grid.DataBind();
return grid;
}
[ JsonRpcMethod("total", Idempotent = true)]
[ JsonRpcHelp("Returns the total of all integers sent in an array.") ]
public int Total(int[] values)
{
int total = 0;
if (values != null)
{
foreach (int value in values)
total += value;
}
return total;
}
[ JsonRpcMethod("sleep", Idempotent = true) ]
[ JsonRpcHelp("Blocks the request for the specified number of milliseconds (maximum 7 seconds).") ]
public void Sleep(int milliseconds)
{
System.Threading.Thread.Sleep(Math.Min(7000, milliseconds));
}
[ JsonRpcMethod("throwError", Idempotent = true)]
[ JsonRpcHelp("Throws an error if you try to call this method.") ]
public void ThrowError()
{
throw new ApplicationException();
}
[ JsonRpcMethod("format", Idempotent = true)]
[ JsonRpcHelp("Formats placeholders in a format specification with supplied replacements. This method demonstrates fixed and variable arguments.") ]
public string Format(string format, params object[] args)
{
return string.Format(format, args);
}
[ JsonRpcMethod("counter", Idempotent = true)]
[ JsonRpcHelp("Increments a counter and returns its new value. Demonstrates use of session state.") ]
public int SessionCounter()
{
int counter = 0;
object counterObject = Session["Counter"];
if (counterObject != null)
counter = (int) counterObject;
Session["Counter"] = ++counter;
return counter;
}
[ JsonRpcMethod("encode", Idempotent = true)]
[ JsonRpcHelp("Returns the bytes of a string in a given encoding that are transmitted as a Base64 string.") ]
public byte[] EncodeBytes(string s, string encoding)
{
return System.Text.Encoding.GetEncoding(encoding).GetBytes(s);
}
[JsonRpcMethod("decode", Idempotent = true)]
[JsonRpcHelp("Returns the string from encoded bytes (transmitted as a Base64 string).")]
public string DecodeString(byte[] bytes, string encoding)
{
return System.Text.Encoding.GetEncoding(encoding).GetString(bytes);
}
//
// NOTE: To send and receive typed objects, use public types only
// that have a default constructor. Only public read/write fields
// and properties are convert to and from JSON.
//
public class Marriage
{
public Person Husband;
public Person Wife;
public Marriage() { }
public Marriage(Person husband, Person wife)
{
Husband = husband;
Wife = wife;
}
}
public class Person
{
public string FirstName;
public string LastName;
public Person() { }
public Person(string fn, string ln)
{
FirstName = fn;
LastName = ln;
}
}
}
}