gpt4 book ai didi

asp.net-mvc-4 - 根本无法让 SignalR (asp.net mvc4) 和 require.js 一起工作

转载 作者:行者123 更新时间:2023-12-04 13:32:47 26 4
gpt4 key购买 nike

我在网上看到过类似的帖子,没有人建议对我有用。在这一点上,我真的面临着倾销一个或另一个的选择。

这个“SignalR 和 MVC 4 入门教程”:

http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc-4

说你需要两个脚本来使 signalR 工作:

    <!--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>

我不知道如何在 require.js 中制作第二个自动生成的 SignalR 集线器脚本。除非我遗漏了一些东西,否则似乎没有一个可行的 require.js 语法来包含自动生成的脚本。如果没有它,您会在 jquery.signalR-1.1.2.js 的第 159 行收到此错误:

“JavaScript 运行时错误:SignalR:加载集线器时出错。确保集线器引用正确,例如”

jquery.signalR 中的代码正在执行此操作:
    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>.");
}
};

有没有人真的通过 require.js 让这个自动生成的脚本发生了?

一直在研究这个。让我补充一些细节:

我正在使用这种方法 - 构建可扩展的客户端应用程序:( http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/ ) 来制作更具可扩展性的结构。该系列的第二部分“允许模块使用多个文件和逻辑文件夹结构” http://johndavidmathis.wordpress.com/2013/04/23/structuring-scalable-client-side-applications/让我将我的实际信号器代码拆分为一个单独的 Marionette 聊天模块(与我的主 app.js 文件分开)以实现更好的文件结构。我真的很喜欢这种方法。我的项目的其余部分现在都是这样设置的,在查找代码方面确实显示出了好处。我认为额外的拆分是我卡住的地方。似乎无法将第二个依赖项(自动生成的脚本)放入单独的聊天模块文件中。我仍在研究这个,但在这一点上对我来说是这样的。 require.js 将依赖项添加到我的 Marionette 应用程序中:
    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();
});
})

如果我想让聊天依赖项进一步进入应用程序,进入另一个文件中的聊天模块?

就像是?
    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...

更新:

下面的答案在我的开发环境中确实有效。但是当我将代码发布到真正的生产服务器时它不起作用。

当代码发布到真正的生产服务器(Windows Server Enterprise 2008 R2 上的 IIS 6.1)时,浏览器控制台再次显示“404”作为自动生成的引用。

具体来说,控制台显示“?”被添加到“.js”之前的引用路径中,像这样......

http://mydomain.com/myapp/Scripts/application/signalr/hubs?.js ...

尝试采取“?” out 但随后它会从路径中删除我的应用程序名称,就像这样......

http://mydomain.com/signalr/hubs.js .

我想什么会让我有第一个,没有“?”,就像......

http://mydomain.com/myapp/Scripts/application/signalr/hubs.js

我只是不知道如何做到这一点。

最后更新:

生产服务器的最后一 block 拼图是站点的虚拟目录。这是对我有用的最终代码。感谢 Raciel R 的帮助:
    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
});

最佳答案

requirejs.config({        
paths: {
//core
"jquery": "jquery-1.9.1",

"signalr": "jquery.signalR-1.1.2",
"signalr.hubs": "/signalr/hubs?"
},
shim: {
"jquery": {exports: "$"},
"signalr": { deps: ["jquery"] },
"signalr.hubs": { deps: ["signalr"] }
});

然后你所要做的就是在你的模块中使 signalr.hubs 成为必需的。 IE:
require(["signalr.hubs"], function(){
//your code here
});

关于asp.net-mvc-4 - 根本无法让 SignalR (asp.net mvc4) 和 require.js 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18022210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com