#c# #jquery #asp.net #ajax #signalr
#c# #jquery #asp.net #ajax #signalr
Вопрос:
Глобальный.asax:
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapConnection<myconnection>("echo", "echo/{*operation}");
}
myconnection.cs
public class myconnection : PersistentConnection
{
protected override Task OnReceivedAsync(string clientId, string data)
{
// Broadcast data to all clients
return Connection.Broadcast(data);
}
}
~/Pages/Messages.aspx
<script src="http://code.jquery.com/jquery-1.7.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery.signalR.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var connection = $.connection('echo');
connection.received(function (data) {
$('#messages').append('<li>' data '</li>');
});
connection.start();
$("#broadcast").click(function () {
connection.send($('#msg').val());
});
});
</script>
<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />
<ul id="messages">
</ul>
ОШИБКА:
SignalR: Соединение должно быть запущено перед отправкой данных. Вызовите .start() перед .send()
Что я пробовал до сих пор:
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
</configuration>
<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>
Оба решения (https://github.com/SignalR/SignalR/wiki/Faq ) не устранил мою проблему.
Есть идеи? Спасибо.
Ответ №1:
Убедитесь, что вы правильно настроили URL для echo
скрипта:
var connection = $.connection('<%= ResolveClientUrl("~/echo") %>');
Поскольку вы находитесь внутри ~/Pages
папки, использование echo
неверно, поскольку ваша маршрутизация ожидает, что /echo
или /appname/echo
приложение размещено внутри виртуального каталога.