Я пытаюсь создать простой тестовый проект SignalR; однако он не ведет себя так, как я считаю. У меня есть веб-сайт, с помощью следующего кода:Проект тестирования Signalr не работает, как ожидается
namespace SignalRTest3
{
public class MyHub1 : Hub
{
public void Hello(string message)
{
Clients.All.Hello();
}
}
}
Startup.cs:
[assembly: OwinStartupAttribute(typeof(SignalRTest3.Startup))]
namespace SignalRTest3
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
}
Я изменил страницу Индекс:
<body>
<!-- HTML Content -->
<script type="text/javascript" src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.signalR-2.1.2.min.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script>
<script type="text/javascript" src="~/Scripts/SignalRTest.js"></script>
<div class="jumbotron">
<h1>SignalR Test</h1>
</div>
</body>
И файл JS ссылки выше :
$(function () {
// Declare a proxy to reference the hub.
var hub = $.connection.MyHub1;
// Create a function that the hub can call to broadcast messages.
hub.client.Hello = function (message) {
alert(message);
};
hub.start();
});
Итак, намерение i что при получении уведомления на сайте появится предупреждение. Для запуска этого, у меня есть консольное приложение:
class Program
{
static void Main(string[] args)
{
Console.Write("Message: ");
string message = Console.ReadLine();
HubConnection connection = new HubConnection("http://localhost:4035/");
IHubProxy hub = connection.CreateHubProxy("MyHub1");
connection.Start().Wait();
hub.Invoke<string>("Hello", message).Wait();
}
}
Так я набираю сообщение, и можно увидеть, что код в ступицах пожаров, но это выглядит как-то не так с проводкой между яваскриптом и ступицей ; пожалуйста, может кто-нибудь указать мне в правильном направлении?
EDIT: изменить метод подписи и hub.start
согласно предложению JPThorne в
EDIT: пытались использовать CORS, но безрезультатно
Похоже, проблема может быть с прокси-сервером; Я получаю следующий вывод в окне консоли F12:
Uncaught TypeError: Cannot read property 'MyHub1' of undefined
at HTMLDocument.<anonymous> (VM456 SignalRTest.js:3)
at c (jquery-1.10.2.min.js:21)
at Object.fireWith [as resolveWith] (jquery-1.10.2.min.js:21)
at Function.ready (jquery-1.10.2.min.js:21)
at HTMLDocument.q (jquery-1.10.2.min.js:21) (anonymous) @ VM456 SignalRTest.js:3 c @ jquery-1.10.2.min.js:21 fireWith @ jquery-1.10.2.min.js:21 ready @ jquery-1.10.2.min.js:21 q @ jquery-1.10.2.min.js:21
UPDATE:
Благодаря помощи JPThorne, я, наконец, отслеживали его вниз к файлу BundleConfig; мина выглядела следующим образом:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
// Use the development version of Modernizr to develop with and learn from. Then, when you're
// ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
Насколько я могу собрать, регулярное выражение используется для {версии} на ~/Scripts/jquery-{version}.js
также подбирая сценарии SignalR слишком рано!
Быстрый вопрос, оба эти кода находятся в одном проекте или двух разных проектах, потому что IMO - это консольное приложение, а другое - веб-приложение. Это верно? – Prabhat
Да - отдельные приложения. Консольное приложение для отправки сообщения и веб-приложение для его отображения –
Важно, чтобы вы также разрешили CORS. См. Https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client – Tester