2017-02-08 7 views
1

私は単純な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スクリプトを拾いました!

+0

簡単な質問ですが、IMOはコンソールベースのアプリケーションとWebベースのものがあるため、これらのコードは同じプロジェクトまたは2つの異なるプロジェクトにあります。これは正しいです? – Prabhat

+0

はい - 別々のアプリケーションです。メッセージを送信するコンソールアプリ、それを表示するウェブアプリ –

+2

CORSも許可することが重要です。 https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-clientを参照してください – Tester

答えて

1

また、クライアント側でハブを起動する必要があります。さて、それが私たちのために働くものです。あなたはこの試みることができる。また

$.connection.hub 
    .start() 
    .done(function() { console.log("Hub started"); }) 
    .fail(function() { console.log("Error: could not connect"); }); 

を、私は便利なことには、以下のリスナーを見つけた:

$.connection.hub.connectionSlow(function() { 
    console.log("We are currently experiencing difficulties with the connection."); 
}); 

$.connection.hub.error(function (error) { 
    console.log("SignalR error: ", error); 
}); 

UPDATE#1: 私はClients.All.hello(message);

するサーバー上 Clients.All.hello();を変更します

、次にFE変更時hub.client.Hello = function (name, message)~hub.client.Hello = function (message)

UPDATE#2 : 追加: [HubName("MyHub1")]

public class MyHub1 : Hub上記のUPDATE#3:

[OK]をので、私はあなたのバージョンを試してみました、といくつかの問題が実際にあります。

  1. は次のように起動コールしないでください:hub.start();はこのようにそれを呼び出す:$.connection.hub.start();
  2. あなたはjqueryのの最新バージョンにアップグレードしたい場合があります。
  3. SignalRTest.jsの上にjqueryを参照していることを確認してください。そのため、上記の「未定義のプロパティを読み取れません。」というエラーが発生します。
+0

これは正しいかもしれないが、それは答え全体ではない(まだアラートが得られていない)と思われる。 –

+0

[OK]を、私は見ている再びあなたのコードを見て: ます。public voidこんにちは(文字列メッセージ)と hub.client.Hello =関数(名前、メッセージ){ ので...あなたが使用していないが最初の文字列メッセージ - あなたはそれを通過していません。フロントエンドスクリプトには、追加の名前paramがあります。 更新された回答を確認してください。 paramsは一致する必要があります。 – JPThorne

+0

それを試してみてください。私はメソッド(Hello/hello)のケースで演奏しようとしましたが、ダイスはありませんでした。 –

関連する問題