<%@ 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; | |
} | |
} | |
} | |
} |