花了两天的时间让这个工作没有成功,最后我在这里问这个问题。
背景:我正在尝试使用SignalR将桌面应用程序中的实时数据发送到所有网页。
我所拥有的是一个控制台应用程序(这只是为了使概念正常工作,然后将其转移到活动项目),需要将实时数据发送到asp .net内置的网页。两者都使用.Net 4。
在IE9中,它显示调试模式中“chat.client.broadcastMessage =”行的错误,说chat.client为null或未定义。
在firfox中,它没有向我显示该错误,但是它没有正常工作/没有做任何事情,问题是相同的,因为它没有向我显示警报('要求姓名');窗口,所以我猜它不会到那里并在此之前抛出错误。
这是我的网页代码。这是一个新的独立网站项目。
<!DOCTYPE html>
<html>
<head>
<title>SignalR Simple Chat</title>
<style type="text/css">
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
</style>
</head>
<body>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion">
</ul>
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.json-2.2.min.js" type="text/javascript"></script>
<script src="Scripts/json2.js" type="text/javascript"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-1.0.1.min.js" type="text/javascript"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
alert('starting scrip');
// Declare a proxy to reference the hub.
$.connection.hub.url = 'http://<ipaddressORlochost>:8080/chatroom';
alert($.connection.hub);
alert($.connection.hub.url);
var chat = $.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
alert(chat);
chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
alert('asking for name');
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start({ jsonp:true}).done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>
</body>
</html>
-------------------------
我尝试删除下面的行,并在最后添加“/ signalr”。
$。connection.hub.url ='http://:8080 / chatroom';
这是我的桌面应用程序(服务器)代码。
class Program
{
static void Main(string[] args)
{
using (WebApplication.Start<Startup>(@"http://<ipaddressORlochost>:8080/chatroom"))
{
while (true)
{
// GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients.All.addMessage("dsf","asdfd");
Console.WriteLine("Tags sent :" + DateTime.Now.ToString("HH:mm:ss"));
Thread.Sleep(3000);
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HubConfiguration { EnableCrossDomain=true };
app.MapHubs(config);
}
}
public class ChatHub : Hub
{
public void Send(string b,string a)
{
try
{
Clients.All.broadcastMessage(b,a);
}
catch { }
}
}
任何帮助都会得到真正的赞赏。
提前全部谢谢。
--------------找到答案----------编辑这个问题,因为我不能在8小时内回答我自己的问题
大家好
以防万一其他人有同样的问题。我找到了答案/固定。
主要问题是$ .connection现在更改为$ .hubConnection
这是我必须改变的。
我的网页中的脚本。我留下了评论代码,以显示已被替换的内容。
<script type="text/javascript">
$(function () {
alert('starting scrip');
// Declare a proxy to reference the hub.
// $.connection.hub.url = 'http://localhost:8080/chatroom';
var conn = $.hubConnection('http://localhost:8080/chatroom');
alert($.connection.hub);
alert($.connection.hub.url);
var chat = conn.createHubProxy('chatHub'); //$.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
alert(chat);
// chat.client.broadcastMessage = function (name, message) {
// // Html encode display name and message.
// var encodedName = $('<div />').text(name).html();
// var encodedMsg = $('<div />').text(message).html();
// // Add the message to the page.
// $('#discussion').append('<li><strong>' + encodedName
// + '</strong>: ' + encodedMsg + '</li>');
// };
chat.on('addMessage', function (a, message) {
$('#discussion').append('<li><strong>' + $('<div />').text(a).html()
+ '</strong>: ' + $('<div />').text(message).html() + '</li>');
});
alert('asking for name');
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
conn.logging = true;
// Start the connection
conn.start().done(function () {
alert("Now connected!");
}).fail(function () {
alert("Could not Connect!");
});
// $.connection.hub.start({ jsonp: true }).done(function () {
// $('#sendmessage').click(function () {
// // Call the Send method on the hub.
// chat.server.send($('#displayname').val(), $('#message').val());
// // Clear text box and reset focus for next comment.
// $('#message').val('').focus();
// });
// });
});
</script>
在服务器端(桌面应用程序),因为它只是一种方式我在ChatHub中不需要任何东西
static void Main(string[] args)
{
using (WebApplication.Start<Startup>(@"http://localhost:8080/chatroom"))
{
while (true)
{
GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients.All.addMessage("dsf", "Tags sent :" + DateTime.Now.ToString("HH:mm:ss"));
Console.WriteLine("Tags sent :" + DateTime.Now.ToString("HH:mm:ss"));
Thread.Sleep(500);
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HubConfiguration { EnableCrossDomain=true };
app.MapHubs(config);
}
}
public class ChatHub : Hub
{
/public void Send(string b, string a)
//{
// try
// {
// Clients.All.addMessage(b, a);
// }
// catch { }
//}
}
希望这会对别人有所帮助。