Ich habe ähnliche Beiträge im Internet gesehen und nichts, was jemand vorgeschlagen hat funktioniert für mich. Ich bin wirklich mit der Wahl des Dumpings konfrontiert, die es an diesem Punkt scheint.Kann einfach nicht SignalR (asp.net mvc4) und require.js zusammenarbeiten
Dieses "mit SignalR und MVC 4 Tutorial Getting Started":
http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc-4
sagt, Sie brauchen zwei Skript signalR Arbeit machen umfasst:
<!--Reference the SignalR library. -->
<script src="~/Scripts/jquery.signalR-1.0.1.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
Ich bin ratlos, wie wie man das zweite, das automatisch generierte SignalR-Hub-Skript macht, geschieht in require.js. Wenn ich etwas nicht vermisse, scheint es einfach keine brauchbare require.js-Syntax für die Einbeziehung von automatisch generierten Skripten zu geben. Ohne sie erhalten Sie diesen Fehler in Zeile 159 von jquery.signalR-1.1.2.js:
"JavaScript-Laufzeitfehler: SignalR:. Fehler beim Laden des Hub Stellen Sie sicher, Ihren Hub Referenz korrekt ist, zB"
Der Code an diesem Punkt in jquery.signalR wird dies zu tun:
signalR.hub = {
start: function() {
// This will get replaced with the real hub connection start method when hubs is referenced correctly
throw new Error("SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>.");
}
};
hat jemand tatsächlich machte das automatisch generierte Skript, was über require.js passieren?
Studiert dies ein bisschen mehr. Lassen Sie mich einige Details hinzufügen:
Ich verwende diesen Ansatz - Strukturierung skalierbare Client-Seite Anwendungen: (http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/), um eine skalierbare Struktur zu machen. Zweiter Teil in dieser Reihe "Erlaube Modulen, mehrere Dateien und eine logische Ordnerstruktur zu verwenden" http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/ hat mich in einen separaten Marionette-Chat-Modul aufgeteilt (getrennt von meiner Haupt-app.js-Datei), um eine bessere Dateistruktur zu erreichen. Ich mag diesen Ansatz sehr. Der Rest meines Projekts ist jetzt so eingerichtet und zeigt wirklich Vorteile, wenn es darum geht, Code zu finden. Ich denke, dass extra Split ist wo ich feststecke. Scheint nicht, diese zweite Abhängigkeit, das automatisch generierte Skript, in diese separate Chatmoduldatei zu bekommen. Ich studiere das noch, aber es sieht für mich so aus. require.js wird die Abhängigkeit in meine Marionette App:
require(["marionette","handlebars", "signalr", "signalr.hubs"], function (Marionette) {
window.App = new Marionette.Application();
App.addRegions({
headerRegion: "#header",
contentRegion: "#content",
footerRegion: "#footer",
});
require(["modules/main/loader", "modules/chat/loader"], function() {
App.start();
});
})
Wenn ich diese Abhängigkeit online seinen Weg weiter in die App in einer anderen Datei, in das Chat-Modul zu machen?
Etwas wie?
define(dependencies,
function() {
App.module("ChatModule", function (ChatModule, App, Backbone, Marionette, $, _, "signalr.hubs", "signalr.hubs") {
// SignalR Proxy created on the fly
var chat = $.connection.chatHub;
// Start the connection
$.connection.hub.start();
//more chat code...
Ein Update:
Die Antwort unten funktioniert in meinem dev Umgebung. Aber es funktioniert nicht, wenn ich den Code auf einem echten Produktionsserver veröffentliche.
Wenn der Code auf einem echten Produktionsserver veröffentlicht wird (IIS 6.1 unter Windows Server Enterprise 2008 R2), zeigt die Browserkonsole erneut einen "404" für die automatisch generierte Referenz.
Konkret zeigt die Konsole das "?" wird vor ".js" in den Referenzpfad eingefügt, so ...
http://mydomain.com/myapp/Scripts/application/signalr/hubs?.js ...
Versucht, das "?" aus, aber dann entfernt es meinen App-Namen aus dem Pfad, so ...
http://mydomain.com/signalr/hubs.js.
denke ich, was mir bekommen würde es die erste ist, ohne das „?“, Wie ...
http://mydomain.com/myapp/Scripts/application/signalr/hubs.js
Ich sehe einfach nicht, wie das passieren zu machen.
FINAL UPDATE:
Abschließendes Stück des Puzzles für Produktionsserver ist die virtuelle Verzeichnis der Website. Hier ist der letzte Code, der für mich funktioniert hat. Dank Raciel R für Ihre Hilfe:
requirejs.config({
paths: {
//core
"jquery": "jquery-1.9.1",
"signalr": "jquery.signalR-1.1.2",
"signalr.hubs": "/productionservervirtualdirectory/signalr/hubs?"
},
shim: {
"jquery": {exports: "$"},
"signalr": { deps: ["jquery"] },
"signalr.hubs": { deps: ["signalr"] }
});
//Then all you have to do is to make signalr.hubs required in your modules. Ie:
require(["signalr.hubs"], function(){
//your code here
});
Haben Sie MapHubs auf dem Server aufgerufen? Siehe Frage: http://StackOverflow.com/Questions/16235175/404SignalR-Hubs-Fo-SignalR-Chat-Application/16242594#16242594, es ist eine Art umgekehrte, was Sie laufen, aber sollte Ihre Frage beantworten. –
Ja. Tat dies. Kein Würfel. Das Problem scheint ganz spezifisch das Fehlen einer require.js-Syntax zu sein, um diese zweite Referenz zu erstellen - diejenige des automatisch generierten SignalR-Hub-Skripts. Ich sehe Leute, die verschiedene Versuche an der Syntax machen. Ich habe sie alle ausprobiert, aber keiner von ihnen hat für mich gearbeitet. Der untenstehende hat auch nicht für mich funktioniert. – Robert