2013-07-30 55 views
5

我想在控制檯應用程序在南希運行SignalR。SignalR(與自我託管的南希)顯示404協商?clientProtocol = 1.3

當我的瀏覽器$.connection.hub.start()它得到404 - NotFound//localhost:667/negotiate?clientProtocol=1.3

---- 8 < ----

我(想)在另一個運行南希一個端口上SignalR。南希與剃刀合作。 SignalR返回集線器的JavaScript好吧。

(對不起,下面的代碼量,但我一直沒能進一步降低它。)
(這個問題可以從更早的認識 - 那我就慘標記現在刪除的問題)

客戶端代碼:

<script type="text/javascript" src='/Scripts/jquery-1.6.4.min.js'></script> 
    <script type="text/javascript" src="/Scripts/jquery.signalR-2.0.0-beta2.js"></script> 
    <script src="http://localhost:667/signalr/hubs" type="text/javascript"></script> 
var chat; 
$(function() { 
    $.connection.hub.url = '//localhost:667'; 
    $.connection.hub.logging = true; 
    chat = $.connection.chat; 
    chat.client.addMessage = onAddMessage; // declared but not here 

    $.connection.hub.start() 
     .done(function() { 
      alert($.connection.id); 
      chat.server.send('Works!'); 
     }) 
     .fail(function (failreason) { 
      alert(failreason); 
     }); 
}); 

服務器代碼(在控制檯程序運行作爲管理員)

class Program 
{ 
    static void Main(string[] args) 
    { 
     const string webUrl = "http://localhost:666"; 
     const string signalrUrl = "http://localhost:667"; 

     using (var webHost = new Nancy.Hosting.Self.NancyHost(
      new Uri(webUrl))) 
     { 
      using (WebApp.Start<Startup>(signalrUrl)) 
      { 
       webHost.Start(); 

       Console.Write("Press any key"); 
       Console.ReadKey(); 
       webHost.Stop(); 
      } 
     } 
    } 
} 

class Startup 
{ 
    public void Configuration(Owin.IAppBuilder app) 
    { 
     app.MapHubs(new HubConfiguration() { EnableCrossDomain = true }); 
     app.UseNancy(new ApplicationBootstrapper()); 
    } 
} 

public class ApplicationBootstrapper : DefaultNancyBootstrapper 
{ 
    protected override void ConfigureConventions(
     Nancy.Conventions.NancyConventions nancyConventions) 
    { 
     nancyConventions.StaticContentsConventions.Add(
     Nancy.Conventions.StaticContentConventionBuilder.AddDirectory(
      "Scripts", @"/Scripts") 
     ); 
     base.ConfigureConventions(nancyConventions); 
    } 
} 

public class Chat : Hub 
{ 
    public void Send(string message) 
    { 
     Clients.All.addMessage(message); 
    } 
} 

回答

7

我試過以上代碼與Signalr 1.1.2和SignalR 2.0.0-beta2。 我做你的代碼中的唯一變化是

修改

$.connection.hub.url = '//localhost:667'; 

$.connection.hub.url = 'http://localhost:667/signalr'; 

,並添加js函數方法addMessage顯示接收到的消息,併成功運行了顯示信息的作品! 「

4

首先,我想感謝您的上述代碼。這對我幫助很大!

從您的代碼開始,我創建了一個解決方案,其中Nancy & SignalR在Owin中的相同端口上運行。

控制檯應用程序代碼是這樣

using System; 
using Microsoft.AspNet.SignalR; 
using Microsoft.Owin.Hosting; 
using Nancy; 
using Owin; 

namespace NancySignalrOwin 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var url = "http://localhost:8080"; 

      using (WebApp.Start<Startup>(url)) 
      { 
       Console.WriteLine("Running on http://localhost:8080", url); 
       Console.WriteLine("Press enter to exit"); 
       Console.ReadLine(); 
      } 
     } 
    } 

    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapSignalR(); 
      app.UseNancy(); 
     } 
    } 

    public class MyHub : Hub 
    { 
     public void Send(string name, string message) 
     { 
      Console.WriteLine("{0} said {1}", name, message); 
      Clients.All.addMessage(name, message); 
     } 
    } 

    public class HomeModule : NancyModule 
    { 
     public HomeModule() 
     { 
      Get["/"] = x => 
      { 
       return View["index"]; 
      }; 
     } 
    } 
} 

和看法是這樣的

<!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="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script> 
    <!--Reference the SignalR library. --> 
    <script src="/Content/jquery.signalR-2.0.0-rc1.min.js"></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() { 
      // Declare a proxy to reference the hub. 
      var chat = $.connection.myHub; 

      // Create a function that the hub can call to broadcast messages. 
      chat.client.addMessage = 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>:&nbsp;&nbsp;' + encodedMsg + '</li>'); 
      }; 
      // 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().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> 
+0

感謝張貼此代碼回到剛纔的問題。非常明確,並且是示例我有一個SignalR服務器,並且想要爲它添加一個Nancy POST處理程序,這是第一次。僅供參考,我不得不爲Nancy.Owin軟件包添加任何人。 –