gpt4 book ai didi

c# - Microsoft.AspNet.SignalR : Getting Uncaught TypeError: Object # has no method 'Logon'
转载 作者:行者123 更新时间:2023-11-30 17:08:12 25 4
gpt4 key购买 nike

我是 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>

但是当我尝试调用 ChatHubLogon 方法时,我得到了关注:

Uncaught TypeError: Object # has no method 'Logon'

任何人都可以帮助我在上面使用 SignalR 编码时出错的地方。

最佳答案

当使用 SignalR 通过 JavaScript 与服务器方法通信时,除非通过 HubMethodName 属性指定,否则服务器方法被引用为 Camel Cased。

如果您想继续使用当前代码,可以通过两种方式修复它。

  1. 在你的服务器端 Hub 把 [HubMethodName("foo")] 放在每个具有正确名称的方法。所以登录将是:

    [HubMethodName("登录")]
    公共(public)无效登录(字符串客户端名称)
    {
    ...
    }

  2. 在 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/

25 4 0