首先是安装Redis, 此处略过n步...
然后,新建一个ASP.NET的MVC2的工程《MvcMessage》,需要下载ServiceStack.Redis并把dll复制到工程下,并正确引用。
好,下面开始贴代码了:
1. 在工程目录《Models》下新建类:Message.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Globalization; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; namespace MvcMessage.Models { //model public class Message { public long Id { get; set; } public string SendName { get; set; } public string SendTo { get; set; } public DateTime SendTime { get; set; } public string Msg { get; set; } public int SendType { get; set; } } }
2. 在工程目录《Controllers》下新建控制器:MessageController.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Threading; using ServiceStack.Redis; using MvcMessage.Models; namespace MvcMessage.Controllers { public class MessageController : AsyncController { static private Mutex mutex = new Mutex();//不了解的可以去看资料,这里不说了 static RedisClient redisClient = new RedisClient("172.18.1.240");//redis的IP,端口默认的则不用写 public ActionResult Index() { return View(); } public void SendMessageAsync() { mutex.WaitOne(); try { using (var msgs = redisClient.GetTypedClient
3. 在《Global.asax.cs》文件中注册Routes方法改为:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Message", action = "Index", id = UrlParameter.Optional } // 参数默认值 ); }4. 为Message控制器创建视图:《/Views/Message/Index.aspx》
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPageIndex
昵称: 发送给:所有人 发送给: 内容:
//var i = 0; var lastTime = new Date();//首次打开网页时会以此时间开始取消息 $(document).ready(function () { $.ajaxSetup({ cache: false }); setInterval('long_polling(false)',5000);//每隔5秒取一次消息 }); //接收 function long_polling(s) { if (s) i++; var sendname = $('#sendName').val(); var sendtype = $('#sendType1').attr("checked") ? 1 : 0; var sendto = $('#sendTo').val(); var msg = $('#message').val(); var t = DateToString(lastTime); $.ajax({ url: '/Message/GetMessage', data: { 'sendName': sendname, 'time': t }, dataType: 'json', error: function () { long_polling(false); }, success: function (data) { if (data.code == 200) { var d; for (var item in data.ret) { if (data.ret[item].Msg) { d = ConvertJSONDateToJSDateObject(data.ret[item].SendTime); $('#logs').val(data.ret[item].SendName + "[" + DateToString(d) + "]对[" + (data.ret[item].SendType == 1 ? '所有人' : data.ret[item].SendTo) + "]说: " + data.ret[item].Msg + "\n" + $("#logs").val()); lastTime = d;//更新最后一个消息的时间 } } } else { $("#logs").val('error:' + data.what + '\n' + $("#logs").val()); } } }); } //发送 function sendMsg() { var sendname = $('#sendName').val(); var sendtype = $('#sendType1').attr("checked") ? 1 : 0; var sendto = $('#sendTo').val(); var msg = $('#message').val(); var d = new Date(); var t = DateToString(d); $.ajax({ url: '/Message/SendMessage', data: { 'from': sendname, 'type': sendtype, 'to': sendto, 'msg': msg, 'time': t }, dataType: 'json', success: function (data) { if (data.code == 200) { $("#logs").val(data.ret + '\n' + $("#logs").val()); } else { $("#logs").val(data.what + '\n' + $("#logs").val()); } } }); } //时间转换 function ConvertJSONDateToJSDateObject(JSONDateString) { var date = new Date(parseInt(JSONDateString.replace("/Date(", "").replace(")/", ""), 10)); return date; } function DateToString(d) { var t = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); return t; }
ServiceStack.Redis的资料,实在是太少了,这篇文章算是研究Redis与C#应用的一个实例吧!