script net mvc minification example bundling asp and asp.net-mvc bundle signalr

asp.net-mvc - net - bundling and minification in mvc 5 example



SignalR y MVC bundle (5)

Desde asp.net , utilizando el paquete SignalR.Utils NuGet, descubrí que necesitaba estar en el directorio con la DLL que tiene el concentrador:

( asumiendo que tiene una estructura de solución estándar y está utilizando 2.2.0 de SignalR.Utils )

cd C:/YourSolution/YourProjectWithTheHub/bin/Debug ../../../packages/Microsoft.AspNet.SignalR.Utils.2.2.0/tools/signalr.exe ghp

Después de ejecutar la herramienta, habrá un archivo server.js en el directorio donde la ejecutó (en este caso, Debug ).

( Nota: no pude hacer que funcionara al especificar la ruta con el indicador / p, y por alguna razón, incluso cuando funciona, crea un directorio temporal con el archivo signalr.exe )

Estoy tratando de usar SignalR con el paquete MVC, pero tengo problemas para descubrir cómo incluir el script / signalr / hubs en el paquete. Por ahora tengo que insertar la ruta entre jquery.signalR y mi código. Eso dará lugar a tres solicitudes de archivos javascript.

¿Hay alguna forma de incluir / signalr / hubs en mi paquete de mvc?



Sé que este es un tema antiguo, pero me gustaría agregar lo siguiente para SignalR 2.x. Tenía muchas ganas de agrupar el proxy con SquishIt y, por prueba y error, logré encontrar lo siguiente:

using Microsoft.AspNet.SignalR using Microsoft.AspNet.SignalR.Hubs var resolver = new DefaultHubManager(new DefaultDependencyResolver()); var proxy = new DefaultJavaScriptProxyGenerator(resolver, new NullJavaScriptMinifier()); string iCanHazScriptNao = proxy.GenerateProxy("/signalr");


Un poco tarde, pero aquí está mi contribución:
Crea un archivo javascript con los siguientes contenidos:

(function ($) { $.ajax({ url: "/signalr/hubs", dataType: "script", async: false }); }(jQuery));

A continuación, agregue el archivo a la colección de paquetes.
Esto cargará el código "/ signalr / hubs" por ti.


Usé la respuesta @KTW mencionada en este hilo y aquí está el cambio completo

BundleConfig

public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/modernizr-2.6.2.js", "~/Scripts/jquery-2.2.3.js", "~/Scripts/jquery-ui-1.11.4.js", "~/Scripts/jquery.multiselect.js", "~/Scripts/jquery.dataTables.js", "~/Scripts/jquery.jstepper.min.js", "~/Scripts/underscore.min.js" )); bundles.Add(new ScriptBundle("~/bundles/SignalRScripts").Include( "~/Scripts/jquery.signalR-2.2.2.min.js", "~/Scripts/signalRBundle.js", "~/Scripts/Views/Search/SignalRFunctions.js")); } }

SignalRFunctions.js

$(function() { // Declare a proxy to reference the hub. var usersHub = $.connection.currentUsersHub; //Create a function that the hub can call to broadcast messages. usersHub.client.broadcastMessage = function(reservationNumber, usrName) { //Message broadcast from server //now find the id with reservationNumber on the page and to that append the user name var id = ''#'' + reservationNumber; if ($(id).length) { if (usrName.length) { itemsOpened($(id), usrName); } else { itemsClosed($(id)); } } //else { // //is it possible that server broad casted for a reservationNumber and is not available at the client? //} }; //Accepts dictionary from hub and goes through search results //https://.com/questions/7776337/reading-c-sharp-dictionary-in-javascript usersHub.client.broadcastCollection = function (reservationNumberAndUsers) { for (var resNumKey in reservationNumberAndUsers) { if (reservationNumberAndUsers.hasOwnProperty(resNumKey)) { //Message broadcast from server //now find the id with ReservationNumber on the page and to that append the user name var id = ''#'' + resNumKey; if ($(id).length) { if (reservationNumberAndUsers[resNumKey].length) { itemsOpened($(id), reservationNumberAndUsers[resNumKey]); } else { itemsClosed($(id)); } } } } }; $.connection.hub.start().done(function() { var searchedReservationNumbers = []; if (typeof jsData !== ''undefined'') { if (jsData && jsData.length) { for (var i = 0; i < jsData.length; i++) { searchedReservationNumbers.push(jsData[i].UReservationNumber); } if (searcheduReservationNumbers.length !== 0) { usersHub.server.getWorkingUsersOnUReservationNumber(searcheduReservationNumbers); } } } }).fail(function () { console.log(''Could not Connect To SignalrHub!''); }); /*In case we would decide to continuously reconnect making connection to server. $.connection.hub.disconnected(function() { setTimeout(function() { $.connection.hub.start(); }, 5000); // Restart connection after 5 seconds. });*/ function itemsOpened(elem, id) { var item = "Opened By - " + id; elem.prop(''title'', item); elem.css(''background-color'', ''chocolate''); }; function itemsClosed(elem) { elem.prop(''title'', ""); elem.css(''background-color'', ''''); }; });

signalRBundle.js

(function ($) { $.ajax({ url: "/signalr/hubs", dataType: "script", async: false }); }(jQuery)); /* Source https://.com/questions/11556110/signalr-and-mvc-bundle */

SomePartialView.cshtml En lugar de escribir abajo en la vista parcial de arriba

@using Localization @using Newtonsoft.Json @model NameSpace.ViewModels.FilterVM @{ ViewBag.Title = Strings.Filter; } @using (Html.BeginForm()) { <div class="large-12 columns"> ---SOME CODE HERE </div> } @section scripts { <script type="text/javascript" language="javascript"> var jsData = @Html.Raw(JsonConvert.SerializeObject(Model)); </script> <script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script> <script src="~/signalr/hubs"></script> <script src="~/Scripts/Views/Search/SignalRFunctions.js"></script> }

Esto cambió a

@using Localization @using Newtonsoft.Json @model NameSpace.ViewModels.FilterVM @{ ViewBag.Title = Strings.Filter; } @using (Html.BeginForm()) { <div class="large-12 columns"> ---SOME CODE HERE </div> } @section scripts { <script type="text/javascript" language="javascript"> var jsData = @Html.Raw(JsonConvert.SerializeObject(Model)); </script> @Scripts.Render("~/bundles/SignalRScripts") }

darse cuenta

@Scripts.Render("~/bundles/SignalRScripts")

en vista parcial arriba. Sin el archivo @KTW arriba (solicitud ajax para / signalr / hubs)

var usersHub = $.connection.currentUsersHub;

Siempre venia como nulo.