私は単純なSignalRテストプロジェクトを作成しようとしています。しかし、それは私がそれがすべきと信じているように行動していません。Signalrテストプロジェクトが期待通りに機能しない
namespace SignalRTest3
{
public class MyHub1 : Hub
{
public void Hello(string message)
{
Clients.All.Hello();
}
}
}
Startup.cs:上記参照
<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ファイルです:私はインデックスページ変更しました
[assembly: OwinStartupAttribute(typeof(SignalRTest3.Startup))]
namespace SignalRTest3
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
}
私は、次のコードでWebサイトを持っています:
$(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();
}
}
は、だから私は、メッセージを入力して、ハブ火災のコードことがわかりますが、JavaScriptとハブとの間の配線に何か問題がありますように見えます;誰かが正しい方向に私を向けることができますか?
EDIT:変更メソッドのシグネチャとJPThorneの提案どおりhub.start
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はコンソールベースのアプリケーションとWebベースのものがあるため、これらのコードは同じプロジェクトまたは2つの異なるプロジェクトにあります。これは正しいです? – Prabhat
はい - 別々のアプリケーションです。メッセージを送信するコンソールアプリ、それを表示するウェブアプリ –
CORSも許可することが重要です。 https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-clientを参照してください – Tester