在过去的几个小时里,我一直在努力工作。我有一个使用SignalR的聊天应用程序,但在运行它时收到javascript错误“对象不支持属性或方法”。我正在使用IIS来托管该网站。 我猜javascript错误是因为启动没有被解雇。
请帮忙。
[assembly: OwinStartup( typeof( SignalrSimpleChat.Startup ) )]
namespace SignalrSimpleChat
{
public class Startup
{
public void Configuration( IAppBuilder app )
{
app.MapSignalR( ); // not getting hit!!!!
}
}
}
我的金块安装是
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="jQuery" version="2.0.3" targetFramework="net45" />
<package id="json2" version="1.0.2" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR" version="2.0.1" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.Core" version="2.0.1" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.JS" version="2.0.1" targetFramework="net40" />
<package id="Microsoft.AspNet.SignalR.Owin" version="1.2.0" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.SystemWeb" version="2.0.1" targetFramework="net45" />
<package id="Microsoft.Owin" version="2.1.0-rc1" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0-rc1" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="2.1.0-rc1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>
这是我的页面
<head>
<title>Index</title>
<script src="../../Scripts/jquery-2.0.3.js"></script>
<script src="../../Scripts/jquery.signalR-2.0.1.js"></script>
<script src="../../Scripts/json2.js"></script>
<script src="@Url.Content("~/signalr/hubs")"></script>
</head>
<body>
<div>
<input type="text" disabled id="userName" />
<input type="text" disabled id="groupName" />
<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />
<input type="button" id="groupcast" value="groupcast" />
<ul id="messages">
</ul>
</div>
<script type="text/javascript">
$(function () {
var chat = $.connection.chat;
$('#userName').val(prompt('Enter your name:', ''));
$('#groupName').val(prompt('Enter your groupName:', ''));
chat.userName = $('#userName').val();
chat.groupName = $('#groupName').val();
chat.addMessage = function (userName, groupName, message) {
$('#messages').append('<li><b>' + groupName + "." + userName + ":</b>" + message + '</li>');
$('#msg').val('');
};
$("#broadcast").click(function () {
chat.sendAll(chat.userName, chat.groupName, $('#msg').val());
});
$("#groupcast").click(function () {
chat.sendGroup(chat.userName, chat.groupName, $('#msg').val());
});
$.connection.hub.start().done(function () {
chat.join(chat.groupName); //throws exception!!!!!!!!!
});
$.connection.hub.start();
});
和我的代码
namespace SignalrSimpleChat.Models.Helpers
{
public class Chat : Hub
{
public void SendAll( string userName, string groupName, string message )
{
Clients.All.addMessage( userName, groupName, message );
}
public void SendGroup( string userName, string groupName, string message )
{
Clients.Group( groupName ).addMessage( userName, groupName, message );
}
public void Join( string groupName )
{
Groups.Add( Context.ConnectionId, groupName );
}
}
}
答案 0 :(得分:4)
从SignalR 1.0开始,客户端和服务器方法只能分别通过客户端和服务器命名空间访问。 State也有它自己的命名空间。
这一更改是为了避免客户端和服务器方法之间的冲突。您的JS代码将更改为如下所示:
$(function () {
var chat = $.connection.chat;
$('#userName').val(prompt('Enter your name:', ''));
$('#groupName').val(prompt('Enter your groupName:', ''));
chat.state.userName = $('#userName').val();
chat.state.groupName = $('#groupName').val();
chat.client.addMessage = function (userName, groupName, message) {
$('#messages').append('<li><b>' + groupName + "." + userName + ":</b>" + message + '</li>');
$('#msg').val('');
};
$("#broadcast").click(function () {
chat.server.sendAll(chat.userName, chat.groupName, $('#msg').val());
});
$("#groupcast").click(function () {
chat.server.sendGroup(chat.userName, chat.groupName, $('#msg').val());
});
$.connection.hub.start().done(function () {
chat.server.join(chat.groupName); //should no longer throw exception!!!!!!!!!
});
$.connection.hub.start();
});
答案 1 :(得分:1)
尝试使用
$.connection.hub.start().done(function () {
chat.server.join('test');
});
如果不起作用,请尝试不使用局部变量:
$.connection.hub.start().done(function () {
$.connection.chat.server.join('test');
});