signalR: / signalr / hubs Non généré

je peux obtenir ce tutoriel pour travailler dans un nouveau projet, mais pas dans mon projet existant.

mon projet est un ASP.Net MVC 4 application web avec l'attribut suivant dans le web.fichier de configuration:

<appSettings>
  <add key="webpages:Enabled" value="true"/>
</appSettings>

c'est parce que mon application est une Application D'une seule Page, qui utilise AngularJS du côté du client. La seule page de ma demande est index.cshtml, auquel j'ai ajouté le code correspondant pour signalR:

 <!-- signalR chat -->
<script src="~/Scripts/jquery.signalR-1.0.0.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.chatHub;
        // Create a function that the hub can call to broadcast messages.
        chat.client.broadcastMessage = 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>

Ensuite, j'ai le ChatHub.fichier cs:

public class ChatHub : Hub
{
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(name, message);
    }
}

Et enfin dans le monde.asax:

 protected void Application_Start()
    {
        RouteTable.Routes.MapHubs();
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

quand j'exécute l'application, le fichier /signalr/hubs n'est pas généré. J'obtiens une erreur 404 lors de la demande de fichier, et il se bloque sur la ligne:

 chat.client.broadcastMessage = function (name, message) { ....

parce que chat est null car la ligne précédente n'a pas trouvé chatHub:

var chat = $.connection.chatHub;

est-ce que quelqu'un sait ce qui ne va pas avec mon code ?

UPDATE

j'ai résolu mon problème en changeant la ligne::

<script src="/signalr/hubs"></script>

<script src="~/signalr/hubs"></script>
21
demandé sur Sam 2013-07-02 13:29:38

6 réponses

j'ai résolu mon problème en changeant la ligne::

<script src="/signalr/hubs"></script>

<script src="~/signalr/hubs"></script>
16
répondu Sam 2013-07-02 10:01:44

En outre, la raison pour laquelle /signalr/hubs ne sont pas générés est forget de mapper SignalR dans la Configuration de démarrage OWIN.

public class Startup
{
   public void Configuration(IAppBuilder appBuilder){
         ...
         appBuilder.MapSignalR();
         ...
   }
 ...
3
répondu Marat Batalandabad 2015-06-17 11:18:52

dans mon cas, c'était parce que mon cours de ChatHub n'était pas Public.

2
répondu Maximilian Wilson 2015-11-28 21:35:07

j'ai eu un problème similaire lorsque le fichier hubs n'était pas généré. Il ressemble à l'OP suivre les étapes ici. Le chemin que j'ai résolu le problème avec le jquery. Le tutoriel que j'ai relié ci-dessous a été écrit avec jquery 1.6.4 et jquery-signalr version 2.1.0. Quand Visual Studio a généré le dossier Scripts pour moi, il a utilisé la version 1.10.2 de jquery et la version 2.0.2 de jquery-signalr.

la façon dont j'ai corrigé ceci était simplement pour éditer l'index.HTML fichier. Notez que vous pouvez utiliser la fenêtre de console javascript de Chrome Ctrl+Shift+J pour voir les erreurs.

1
répondu user2023861 2015-02-02 15:03:35

j'aimerais ajouter que le fichier signalR Readme contient une note à ce sujet. Et aussi si votre page signalR est dans une vue partielle, un script devrait être placé dans la page principale.

Please see http://go.microsoft.com/fwlink/?LinkId=272764 for more information on using SignalR.

Upgrading from 1.x to 2.0
-------------------------
Please see http://go.microsoft.com/fwlink/?LinkId=320578 for more information on how to 
upgrade your SignalR 1.x application to 2.0.

Mapping the Hubs connection
----------------------------
To enable SignalR in your application, create a class called Startup with the following:

using Microsoft.Owin;
using Owin;
using MyWebApplication;

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

Getting Started
---------------
See http://www.asp.net/signalr/overview/getting-started for more information on how to get started.

Why does ~/signalr/hubs return 404 or Why do I get a JavaScript error: 'myhub is undefined'?
--------------------------------------------------------------------------------------------
This issue is generally due to a missing or invalid script reference to the auto-generated Hub JavaScript proxy at '~/signalr/hubs'.
Please make sure that the Hub route is registered before any other routes in your application.

In ASP.NET MVC 4 you can do the following:

      <script src="~/signalr/hubs"></script>

If you're writing an ASP.NET MVC 3 application, make sure that you are using Url.Content for your script references:

    <script src="@Url.Content("~/signalr/hubs")"></script>

If you're writing a regular ASP.NET application use ResolveClientUrl for your script references or register them via the ScriptManager 
using a app root relative path (starting with a '~/'):

    <script src='<%: ResolveClientUrl("~/signalr/hubs") %>'></script>

If the above still doesn't work, you may have an issue with routing and extensionless URLs. To fix this, ensure you have the latest 
patches installed for IIS and ASP.NET. 
0
répondu Hugo 2017-04-10 14:36:31

pour moi la solution était de réinstaller tous les paquets et restaurer tous les avec des dépendances.

ouvrez la console nuget powershell et utilisez cette commande.

Update-Package -Reinstall
0
répondu Mihai Alexandru-Ionut 2017-05-27 09:50:31