我创建了一个新的VS 2013项目,并使用Firefox浏览器查看了default.aspx页面.当我检查它已经进行的网络通话时,我看到它不断调用:
http://localhost:50682/6a663a78019845d5ade4a328cad09cc2/arterySignalR/poll?transport=longPolling&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAAOBmDwPWa2ky2MAZXFHBMVAAAAAACAAAAAAAQZgAAAAEAACAAAADSADQXBVKiKczflJ0OzUjOLduFTJE4zd%2FLHWGpDfXnuAAAAAAOgAAAAAIAACAAAACyEX81VwilygfphPoEKCYQ6ZwrkzExoKfZzEMkqBKqqzAAAADG%2BDJbrEFOfsNm9OKhqacnGseQvrwy5kmyZnI5YJiZbjYFgzMELXHfwA7Sxjj4osJAAAAAvQvoG4N0nn8eB9FRaJaZyqaUDF%2F9ypvGN%2B%2BVefnx8U1Fq6P9HXO9vEC%2BfA2s8R4jik58rD4IcFMjM4P8l5kv6g%3D%3D&messageId=d-F1180A0E-W%2C0%7Cl%2C4%7Cm%2C0&requestUrl=http%3A%2F%2Flocalhost%3A50656%2Fdefaulttest&browserName=Firefox&tid=4&_=1384207744328
Run Code Online (Sandbox Code Playgroud)
它为什么这样做?我如何停止这些电话?我看到每隔6秒对上述URL进行无限次调用.请帮助我理解这一点并解决这个问题.
我正在使用SignalR向所有客户广播消息.我需要在我的集线器类之外触发广播,如下所示:
var broadcast = new chatHub();
broadcast.Send("Admin","stop the chat");
我收到错误消息:
不支持使用不是由HubPipeline创建的Hub实例.
我在移动应用程序中使用SignalR 2.0和.NET客户端,因此我需要处理各种类型的断开连接.有时SignalR客户端在没有我帮助的情况下重新连接 - 有时我必须通过再次调用HubConnection.Start()来重新连接.(因为SignalR在某些时候神奇地自动重新连接,我想知道我是否缺少功能或配置设置)
设置自动重新连接的客户端的最佳方法是什么?我已经看过处理Closed()事件的javascript示例,然后在n秒后连接.有没有推荐的方法?
我已经阅读了有关SignalR连接生命周期的文档和几篇文章,但我仍然不清楚如何处理客户端重新连接.
谢谢!
我已经建立了一个SignalR集线器来在服务器和客户端之间进行通信.中心服务器端代码存储在名为Hooking.cs的类中.我想要的是能够调用Hooking.cs中定义的方法,允许我从应用程序的任何地方向任何连接的客户端广播消息.似乎为每个客户端/服务器调用创建了一个新的Hooking.cs实例,所以我希望我能够使用像
var hooking = new Hooking();
hooking.Test();
Run Code Online (Sandbox Code Playgroud)
用Hooking.cs中定义的方法Test()如
public static void Test() {
Clients.test()
}
Run Code Online (Sandbox Code Playgroud)
并与客户端javascript
var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()
Run Code Online (Sandbox Code Playgroud)
不幸的是,它并不那么简单,因为客户端不是静态的,因此无法从静态方法访问.
通过SignalR源代码,我遇到了一个看起来很有前景的方法Hubs.Invoke(string hubName, string method, params object[] args),所以我希望我可以使用类似的东西,Hubs.Invoke("Hooking", "Test")但是我无法使它工作.
任何有关这方面的帮助将非常感激
我正在使用SignalR的中心功能(https://github.com/SignalR/SignalR)向所有订阅的客户端发布消息:
public class NewsFeedHub : Hub
public void Send(string channel, string content)
{
Clients[channel].addMessage(content);
}
Run Code Online (Sandbox Code Playgroud)
这通过Javascript调用"发送"时工作正常,但我也希望Web应用程序发布消息(来自ASP.NET MVC操作方法).我已经尝试实例化新对象ob NewsFeedHub并调用Send方法,但这会导致错误(因为未设置Hub的基础"连接").有没有办法在没有连接的情况下使用Hub?
我已经开始使用SignalR,并试图找出何时发生Hub Reconnect.我在网上找不到任何令人满意的解释.有人可以解释何时/为什么会发生重新连接?
我正在尝试将SignalR添加到我的项目中(ASPNET MVC 4).但我不能让它发挥作用.
在下图中,您可以看到我收到的错误.
我已经阅读了很多stackoverflow帖子,但没有一个是解决我的问题.
这是我到目前为止所做的:
1) Ran Install-Package Microsoft.AspNet.SignalR -Pre
2) Added RouteTable.Routes.MapHubs(); in Global.asax.cs Application_Start()
3) If I go to http://localhost:9096/Gdp.IServer.Web/signalr/hubs I can see the file content
4) Added <modules runAllManagedModulesForAllRequests="true"/> to Web.Config
5) Created folder Hubs in the root of the MVC application
6) Moved jquery and signalR scripts to /Scripts/lib folder (I'm not using jquery 1.6.4, I'm using the latest)
Run Code Online (Sandbox Code Playgroud)
这是我的Index.cshtml
<h2>List of Messages</h2>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input …Run Code Online (Sandbox Code Playgroud) 有没有办法找出侦听器的数量(连接到集线器的客户端?)
如果至少连接了一个客户端,我正在尝试运行/启动任务,否则不启动它:
[HubName("taskActionStatus")]
public class TaskActionStatus : Hub, IDisconnect
{
static CancellationTokenSource tokenSource;
public void GetTasksStatus(int? siteId)
{
tokenSource = new CancellationTokenSource();
CancellationToken ct = tokenSource.Token;
ITaskRepository taskRepository = UnityContainerSetup.Container.Resolve<ITaskRepository>();
// init task for checking task statuses
var tasksItem = new DownloadTaskItem();
taskRepository.GetTasksStatusAsync(siteId, tasksItem, ct);
// subscribe to event [ listener ]
tasksItem.Changed += new EventHandler<TaskEventArgs>(UpdateTasksStatus);
}
public void UpdateTasksStatus(object sender, TaskEventArgs e)
{
Clients.updateMessages(e.Tasks);
}
// when browsing away from page
public Task Disconnect()
{
try
{
tokenSource.Cancel();
} …Run Code Online (Sandbox Code Playgroud) 如何从控制器的操作中调用hub方法?这样做的正确方法是什么?
有人在帖子中使用过这个:
DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("AdminHub") as AdminHub;
hub.SendMessage("woohoo");
Run Code Online (Sandbox Code Playgroud)
但对我来说,这是投掷:
不支持使用不是由HubPipeline创建的Hub实例.
我还读到你可以创建一个集线器上下文,但我不想对这个动作负责,也就是说,动作做的事情如下:
hubContext.Client(...).someJsMethod(..)
Run Code Online (Sandbox Code Playgroud) 这让我疯了.
我正在使用最新的signalR版本(2.0.2).这是我的集线器代码(OnConnected)
public override Task OnConnected()
{
//User is null then Identity and Name too.
Connections.Add(Context.User.Identity.Name, Context.ConnectionId);
return base.OnConnected();
}
Run Code Online (Sandbox Code Playgroud)
这是我的Controller的登录方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UnitOfWork.UserRepository.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
}
TempData["ErrorMessage"] = Resources.InvalidUserNameOrPassword;
// If we got this far, something failed, redisplay form
return RedirectToAction("Index","Home");
}
Run Code Online (Sandbox Code Playgroud)
我发现有些人在OnDisconnected上遇到这个问题,我甚至都没有.
我正在使用MCV5模板.
你知道什么是错的吗?
signalr-hub ×10
signalr ×9
asp.net-mvc ×4
c# ×4
.net ×2
asp.net ×2
action ×1
javascript ×1
message ×1
owin ×1
reconnect ×1
signalr-2 ×1