我正在尝试从.net Web API控制器操作中调用客户端方法.
我可以这样做吗?
我能找到的唯一一个接近我要做的就是这个:
SignalR +通过操作方法向Hub发送消息
在那里,使用GlobalHost.ConnectionManager.GetHubContext从asp.net MVC控制器动作中发送消息.
当我在我的Web API操作中尝试时,不会抛出任何错误,但是从不在客户端调用方法"methodInJavascript".
Public ActionResult MyControllerMethod() { var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.All.methodInJavascript("hello world"); // or context.Clients.Group("groupname").methodInJavascript("hello world"); }
当我在该动作中设置断点时,我看到代码正在被触及并执行.但是在javascript客户端没有任何事情发生.
为什么?Web API是如此不同,以至于这不起作用?有没有其他人尝试过并取得了成功?
当我从我的中心"内部"调用"methodInJavascript"时,它完美地工作.从.net Web API控制器操作中调用时,将无法正常工作.
更新:
在研究这个问题后,我没有解决方案.我只能假设有东西从像这样的例子失踪服务器与SignalR在ASP.NET MVC 4不会通过客户端的消息,这从控制器的WebAPI调用问题枢纽SignalR像也许有一个额外的配置步骤,以使从HubContext调用或者其他的东西.我最初在这里发布的代码就像那些示例中出现的代码没有被证明有任何缺陷.任何人都可以看到代码中的缺陷吗?从html调用工作.我在我的应用程序中广泛使用它,从未遇到过问题.我从未在API控制器工作中看到来自HubContext的调用.没有错误.对客户端没有任何结果.
已解决(种类):
上面的代码确实在发布时起作用.但是,通过localhost在Visual Studio开发环境中不起作用.客户端没有错误但没有结果.将代码原样发布到Web上的真实服务器确实有效.我从没想过会有什么不同所以我从未尝试过.如果它在本地不起作用,则无法发布.它现在正在运行,但我想知道为什么它在开发环境中不能通过localhost工作.无法使用断点等进行本地测试.
我感觉这是signalr虚拟目录.在本地运行和发布时有些不同.不知道什么,但我看到很多帖子,如http://www.bitwisejourneys.com/signalr-hosting-in-iis-a-nasty-gotcha/.现在阅读,看看是否有办法让它在本地和发布工作.