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