SignalR C#服务器和ASP.NET客户端

时间:2014-01-02 21:17:07

标签: asp.net signalr signalr-hub

我需要客户端向服务器发送消息,服务器会将消息发送给客户端。

在我将其添加到我正在处理的网络应用程序之前,我正尝试做一个小例子。

我阅读了一些我发现的教程并看到了一些示例,但我仍然无法使其工作。

服务器:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(TestServer.Startup))]
namespace TestServer
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;


namespace TestServer
{
    [HubName("ServerHub")]
    class ServerHub : Hub
    {
        public void send(string message)
        {
            Clients.All.serverUpdate(message);
        }
    }
}

客户端: 我想在推送来自服务器的消息时更改Label2文本。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MainPage.aspx.cs" Inherits="TestClient.MainPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br />
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

    </div>
    </form>
    <script src="Scripts/jquery-2.0.3.min.js"></script>
    <script src="Scripts/jquery-ui-1.10.3.min.js"></script>
    <script src="Scripts/jquery.signalR-2.0.1.min.js"></script>
    <script src="/signalr/hubs"></script>
    <script>
        var hub = $.connection.ServerHub;
        hub.client.serverUpdate = function (str) {
            $("#Label2").text(str);
        };
    </script>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Client.Hubs;
using Microsoft.AspNet.SignalR.Client;

namespace TestClient
{
    public partial class MainPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var hubConnection = new HubConnection("http://localhost/signalr");
            IHubProxy ClientHubProxy = hubConnection.CreateHubProxy("ServerHub");
            hubConnection.Start().Wait();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ClientHub ch = new ClientHub();
            ch.sendUpdate("button clicked");
        }
    }
}

我是否需要在与Signalr相关的服务器main中添加一些内容?

在客户端,我不确定下一行中要添加什么网址:

var hubConnection = new HubConnection("http://localhost/signalr");

不确定我将消息发送到服务器的方式(按钮点击后)是正确的方式。

1 个答案:

答案 0 :(得分:0)

没有内置的hub.client.serverUpdate方法 - 该方法的名称必须与您在集线器上定义的方法的名称(发送)相匹配。请参阅此处的入门教程:

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20