我尝试使用signalR添加Web套接字功能,基于: chat example。
我有2个不同的项目 - 1:是纯服务器,包括web api: 我有一个Web方法来获取请求并呼叫集线器:
[HttpGet]
[Route("api/GetData")]
public IHttpActionResult GetCorpDataApi()
{
return Ok(getResponse());
**startWebSocket();**
}
启动Web套接字方法调用:
private void startWebSocket()
{
MonitorHub hub = new MonitorHub();
Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(hub.DisplayTimeEvent);
myTimer.Interval = 3000;
myTimer.Start();
}
调用我的集线器中的方法:
public class MonitorHub : Hub
{
public void DisplayTimeEvent(object source, ElapsedEventArgs e)
{
var response = MonitorUtils.GetCorpData();
Clients.All.broadcastMessage(response);
}
}
(所有都在同一个项目中,没有错误编译)。
我的客户端代码位于客户端角度项目中(也在VS下), 我在控制器中添加了所需的功能:
function initWebSocket() {
self.chatHub = null; // holds the reference to hub
self.chatHub = $.connection.MonitorHub; // **I dont have MonitorHub**
$.connection.hub.start();
self.chatHub.client.broadcastMessage = function (response) {
//bla bla
};
}
我想提一下我在index.html中包含的文件:
<script src="scripts/Vendor/jquery/jquery-2.2.1.js"></script>
<script src="scripts/Vendor/jquery/jquery.signalR-2.2.1.js"></script>
<script src="scripts/signalr/hubs"></script>
<script src="assets/global/plugins/angularjs/angular.min.js" type="text/javascript"></script>
$。connection.MonitorHub什么都没有 - 未定义。
我真的相信它与服务器端的事实有关 是在与客户端不同的项目中。当我运行一个像聊天示例这样的简单示例时,它可以工作 - 所有这些都在同一个项目中。
我在控制台中遇到此错误: 错误:SignalR:加载集线器时出错。确保您的集线器引用正确,例如
有什么想法吗?
答案 0 :(得分:0)
我不是100%肯定,但可能是JQuery
版本不匹配的情况。尝试使用较低的jquery版本,例如的jquery-1.6.4.js
答案 1 :(得分:0)
您似乎没有将SignalR服务器添加到您的项目中。您似乎正在启动WebSocket并创建一个集线器实例并抛出一些Web API。这不是SignalR的工作原理。您需要将SignalR服务器软件包安装到您的服务器,然后SignalR将负责处理您的呼叫,实例化您的集线器等。只需按照您发布链接的教程(设置项目部分)或this one