- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 SignalR 的新手,我正在尝试使用 signalR 和 ASP.NET MVC 3 开发简单的聊天应用程序。我已经使用 Tutorial: Getting Started with SignalR (C#) 完成了以下编码。引用。
聊天中心
public class ChatHub : Hub
{
private static readonly Dictionary<string, ChatUser> _users
= new Dictionary<string, ChatUser>(StringComparer.OrdinalIgnoreCase);
public Task Send(string message)
{
var user = _users.Values.FirstOrDefault(u => u.ClientId == Context.ConnectionId);
if (user == null)
{
throw new Exception("User is not logged in");
}
return Clients.All.message(user.Name, message, TimeStamp());
}
public void Logon(string clientName)
{
if (clientName.Length > 10)
{
throw new Exception("I prefer short names.");
}
if (_users.Any(x => x.Key == clientName))
{
throw new Exception("User name is already taken, please select a different one.");
}
_users.Add(clientName, new ChatUser { ClientId = Context.ConnectionId, Name = clientName });
Clients.Caller.name = clientName;
Clients.All.loggedOn(clientName, TimeStamp());
}
public Task Logout()
{
var user = _users.Values.FirstOrDefault(u => u.ClientId == Context.ConnectionId);
if (user != null)
{
_users.Remove(user.Name);
return Clients.All.loggedOff(user.Name, TimeStamp());
}
return null;
}
public IEnumerable<ChatUser> GetUsers()
{
return _users.Values.OrderBy(x => x.Name);
}
private static string TimeStamp()
{
return DateTime.Now.ToShortTimeString();
}
}
ChatUser 类
public class ChatUser
{
public string ClientId { get; set; }
public string Name { get; set; }
}
IndexView.chtml
SignalR 聊天
<div id="info" class="round">
<h1>
SignalR Chat</h1>
<form id="startform">
Enter your name:
<input type="text" id="name" />
<input type="button" id="btn_login" class="button" style="margin-top: 25px;" value="Start chatting" />
</form>
<div id="login_error" style="margin-top: 100px;" class="error">
</div>
</div>
<div id="chat">
<div style="height: 50px;">
<div>SignalRChat</div>
<div id="logout">
<a href="" id="btn_logout">Logout</a>
</div>
</div>
<div class="users-box right round2">
<strong>Users in chat:</strong>
<ul id="users">
</ul>
</div>
<div class="chat-box round2">
<div id="messages">
<ul id="message-list">
</ul>
</div>
<form id="chatform">
<table width="100%">
<tr>
<td>
<input type="text" id="msg" />
</td>
<td align="right" width="100px">
<input type="button" id="btn_send" class="button" value="Send" />
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
</div>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
var onlineUsers = null;
var userList = [];
var chat = $.connection.chatHub;
var getUsers = function () {
chat.server.getUsers().done(function (users) {
onlineUsers = users;
updateUserList();
});
};
var updateUserList = function () {
$('#users li').remove();
userList = [];
$.each(onlineUsers, function () {
var listItem = $('<li>{0}</li>'.format(this.Name));
$('#users').append(listItem);
userList[this.Name] = User(this.Name, listItem);
});
};
var send = function () {
if ($('#msg').val() !== '') {
chat.server.Send($('#msg').val());
$("#msg").val('');
}
};
var login = function () {
if ($('#name').val() !== '') {
clientName = $('#name').val();
chat.server.Logon(clientName, function () {
$("#info").toggle();
$("#chat").toggle();
$('#msg').focus();
getUsers();
}).fail(function (e) {
$('#login_error').html(e);
});
}
};
var logout = function () {
chat.server.Logout();
}
// Callbacks from server
chat.client.message = function (user, msg, time) {
$('#message-list').append('<li class="message">{0} {1}: {2}</li>'.format(time, user, msg));
$("#messages").prop({ scrollTop: $("#messages").prop("scrollHeight") });
};
chat.client.loggedOn = function (user, time) {
$('#message-list').append('<li class="info">{0} {1} logged on</li>'.format(time, user));
getUsers();
};
chat.client.loggedOff = function (user, time) {
$('#message-list').append('<li class="info">{0} {1} logged off</li>'.format(time, user));
getUsers();
};
chat.client.userTyping = function (user) {
userList[user].typing();
};
// Form events
$("#btn_send").click(function () { send(); $('#msg').focus(); });
$("#btn_login").click(function () { login(); });
$("#btn_logout").click(function () { logout(); });
$('#chatform').submit(function () { send(); return false; });
$('#startform').submit(function () { login(); return false; });
// Logout when user closes browser
window.onbeforeunload = function () { chat.server.Logout(); };
// Start chat
$.connection.hub.start().done(function () {
alert("Connected");
});
$("#chat").toggle();
$('#name').focus();
});
</script>
但是当我尝试调用 ChatHub
的 Logon
方法时,我得到了关注:
Uncaught TypeError: Object # has no method 'Logon'
任何人都可以帮助我在上面使用 SignalR 编码时出错的地方。
最佳答案
当使用 SignalR 通过 JavaScript 与服务器方法通信时,除非通过 HubMethodName
属性指定,否则服务器方法被引用为 Camel Cased。
如果您想继续使用当前代码,可以通过两种方式修复它。
在你的服务器端 Hub 把 [HubMethodName("foo")]
放在每个具有正确名称的方法。所以登录将是:
[HubMethodName("登录")]
公共(public)无效登录(字符串客户端名称)
{
...
}
在 JavaScript 脚本中您可以:
chat.server.logon(...);
请记住,您必须将其中一种方法应用于所有方法(通过#1)或与服务器的所有通信(通过#2)。
希望这对您有所帮助!
关于c# - Microsoft.AspNet.SignalR : Getting Uncaught TypeError: Object #<Object> has no method 'Logon' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957850/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!