DWR 类似 ASP.NET 中的 .NET Comet Ajax






4.50/5 (3投票s)
在 ASP.NET 中轻松实现类似 DWR 的 Comet
PokeIn Comet Ajax for .NET
设想一下,一个库,你可以轻松地从客户端访问服务器端对象,反之亦然? 我将解释如何使用 PokeIn 轻松实现这一点。
首先,PokeIn 是一个免费库,你可以从 这里 下载它!
让我们逐步创建一个简单的应用程序。 我将提到 "Bind
" 方法来找到我们的方法。
public static bool Bind(string listenUrl, string sendUrl,
System.Web.UI.Page page, DefineClassObjects classDefs, out string ClientId);
"Bind
" 在客户端提供服务器端对象的定义。 此外,通过此方法,服务器端知道存在客户端连接请求。"Bind
" 为客户端定义一个唯一的 ClientId
,创建指定的用户类,并在客户端定义它们。 简而言之,如果你将 "Bind
" 方法添加到 CometAjax
所需的页面,它将组织你的页面与服务器端通信,例如:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="MyPage._Default" %>
<html>
<head>
<%
string ClientId = ""; //<- it stands to use ClientId on Default.Aspx page,
i.e., you may define server side events for client side objects via PokeIn ;)
if (!PokeIn.Comet.CometWorker.Bind("Listen.aspx", "Send.aspx",
this, new PokeIn.Comet.DefineClassObjects(MyPage._Default.classDefiner),
out ClientId))
{
Response.Write("Application Stopped!");
return;
}
%>
</head>
"Bind
" 方法定义 PokeIn JavaScript 方法和给定的服务器端对象。 至于 "MyPage._Default.classDefiner
" 呢? 它将为每个客户端创建你定义的那些对象。 因此,每个对象都知道它所属的客户端。
以下代码由 Visual Studio 自动生成,除了 "classDefiner
" 方法。
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public static void classDefiner(string clientId, ref Dictionary<string> classList)
{
// HERE we define our Dummy class per each client
classList.Add("Dummy", new Dummy(clientId));
}
}
我们定义了与 clientId
关联的 "Dummy
" 类。 让我展示 Dummy
类。
public class Dummy
{
string ClientId;
public Dummy(string clientId)
{
ClientId = clientId;
}
public void Calculate(int x, int y)
{
PokeIn.Comet.CometWorker.SendToClient(ClientId,
"ResultCalculated(" + (x + y).ToString() + ");");
}
}
如果你的类需要关联的客户端信息,你可以像我在上面的示例中显示的那样保留它。 你将使用带有这个唯一客户端 ID 的 static PokeIn
方法,例如,在上面的示例中,我们调用了 "SendToClient
" 方法。 它在 clientId
的所有者上运行 JavaScript 代码。
这是 Dummy
类的客户端用法
Dummy.Calculate(3, 4);
这不是很简单吗? 因此,我们从服务器端方法发送了 "ResultCalculated
",用于 "Dummy.Calculate
" 调用。 因此,客户端需要这个方法的定义。 如你所知,我们称之为 "ResultCalculated
",但不要忘记你可以发送任何你想要的东西。
"ResultCalculated
" 的定义是
function ResultCalculated( result )
{
alert( result );
}
在我们启动应用程序之前,还有 2 个定义需要完成。"Bind
" 方法中的 "Listen.aspx" 和 "Send.aspx" 参数? 名称无关紧要。 只需要添加以下行来定义两种不同的方式处理程序,例如,Listen.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Listen.aspx.cs"
Inherits="MyPage.Listen" %>
<%
//Check UserLogin etc
PokeIn.Comet.CometWorker.Listen(this);
%>
和 Send.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Send.aspx.cs"
Inherits="MyPage.Send" %>
<%
//Check UserLogin etc
PokeIn.Comet.CometWorker.Send(this);
%>
PokeIn
使用 "Listen
" 定义进行服务器推送操作,使用 "Send
" 定义进行客户端推送操作。
结束!
我们的基于 Comet Ajax 的 Web 应用程序已经完成! 它比 DWR 更容易!
Using the Code
下载附加到本文的代码以查看它的工作方式。 你应该从 这里 下载库!
- 打开项目。
- 右键单击项目引用。
- 添加你下载的 "PokeIn.dll"。
运行!
历史
- 2010 年 4 月 15 日:初始发布