【发布时间】:2014-11-20 15:53:14
【问题描述】:
我正在努力将我的 C# 代码连接到现有的 SignalR 集线器。此集线器是在 SignalR 1.0 中创建的
我有一个非常直接的情况。集线器定义如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR.Hubs;
namespace POC.SignalR.WebHost.Hubs
{
[HubName("SignalRHub")]
public class SignalRHub : Hub
{
/// <summary>
/// Joins the group.
/// </summary>
/// <param name="groupname">The groupname.</param>
public void JoinGroup(string groupname)
{
Groups.Add(Context.ConnectionId, groupname);
Clients.OthersInGroup(groupname).newMemberMessage(Context.ConnectionId);
Clients.Caller.JoinedGroup(groupname);
}
当我使用 Javascript 连接到集线器时,一切都像魅力一样。
// Check if url exists and give it a default value if that's the case.
if (!url) { url = 'http://www.someurl.com/signalr'; }
conn = $.connection.SignalRHub;
var currentGroupName = '';
if (typeof groupName == "string") currentGroupName = groupName;
$.connection.hub.url = url;
$.connection.hub.logging = true;
// Start the connection
$.connection.hub.start().done(function () {
verbosemsg(conn.connection.state);
conn.server.connectionName();// init to get my connectioID
verbosemsg('Connection made now joining group:' + currentGroupName);
if (currentGroupName != '') conn.server.joinGroup(currentGroupName);
});
但是当我使用以下代码在 C# 中连接到集线器时,我一直遇到“'JoinGroup' 方法无法解析。”错误。 hubConnection 处于“已连接”状态,看起来是正确的。
HubConnection hubConnection = new HubConnection("http://www.someurl.com/signalr", false);
IHubProxy hubProxy = hubConnection.CreateHubProxy("SignalRHub");
hubConnection.Start().Wait();
hubProxy.Invoke("JoinGroup", hubConnection.ConnectionId, "SignalRChatRoom").Wait();
据我所知,我已经实现了与此示例类似的代码: http://www.asp.net/signalr/overview/older-versions/signalr-1x-hubs-api-guide-net-client#establishconnection 一定有什么我忽略了,但我无法弄清楚。如果有人能指出我正确的方向,那就太好了。
谢谢。
【问题讨论】:
-
网址不应该是“someurl.com/signalr/hub”吗?如果您只是在浏览器中启动“someurl.com/signalr”,您会看到什么?你看到生成的代理了吗?
-
您正在使用两个参数调用
JoinGroup方法,而服务器上的方法只使用参数 - 组名。这应该有效:hubProxy.Invoke("JoinGroup", "SignalRChatRoom");。另外你不应该使用.Wait(),而是await,否则你可能会出现死锁。
标签: c# signalr signalr-hub