notification net mvc example crear asp asp.net-mvc-4 angularjs signalr single-page-application

asp.net mvc 4 - net - signalR:/signalr/hubs no se genera



signalr sql server mvc (6)

Además, la razón por la que / signalr / hubs no se generan es olvidar Map SignalR en OWIN Startup Configuration.

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

Puedo hacer que este tutorial funcione en un nuevo proyecto, pero no en mi proyecto actual.

Mi proyecto es una aplicación web ASP.Net MVC 4 con el siguiente atributo en el archivo web.config:

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

Esto se debe a que mi aplicación es una aplicación de una sola página, que utiliza AngularJS en el lado del cliente. La única página en mi aplicación es index.cshtml, a la que he agregado el código correspondiente para 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>

Luego tengo el archivo ChatHub.cs:

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

Y finalmente en el archivo global.asax:

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

Cuando ejecuto la aplicación, el archivo / signalr / hubs no se genera. Obtengo un 404 al solicitar el archivo y se bloquea en la línea:

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

porque el chat es nulo ya que la línea anterior no encontró chatHub:

var chat = $.connection.chatHub;

¿Alguien sabe qué pasa con mi código?

ACTUALIZAR

He resuelto mi problema cambiando la línea ::

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

a

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


En mi caso, fue porque mi clase ChatHub no estaba marcada como pública.


He resuelto mi problema cambiando la línea ::

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

a

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


Me gustaría agregar que el archivo Léame signalR tiene alguna nota sobre este tema. Y también si su página de señalR está en una vista parcial, alguna secuencia de comandos debería colocarse en la página maestra.

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.


Para mí, la solución fue reinstalar todos los paquetes y restaurar todas las dependencias .

Abra la consola nuget powershell y use este comando.

Update-Package -Reinstall


Tuve un problema similar donde no se generaba el archivo hubs. Parece que el OP estaba tutorial . La forma en que arreglé el problema tenía que ver con el jquery incluye. El tutorial que he vinculado a continuación fue escrito con jquery 1.6.4 y jquery-signalr versión 2.1.0. Cuando Visual Studio generó la carpeta Scripts para mí, usó jquery versión 1.10.2 y jquery-signalr versión 2.0.2.

La forma en que lo arreglé fue simplemente para editar el archivo index.html. Tenga en cuenta que puede usar la ventana de la consola de JavaScript de Chrome Ctrl + Shift + J para ver los errores.