我需要使用SignalR和软件的内置功能创建扩展作为第三方。首先,我阅读了Stackoverflow上的所有问题和答案,并总结如下(我不确定,如果一切正确的话):
之前提到的软件将应用程序作为IIS的HTTPModule启动,并在某处(对我来说是黑盒)中心的映射发生。我试图事先用我的Hub加载我的程序集,因此我的程序集也可用于集线器的注册,虽然当我尝试通过$ .connection.adminHub访问它时(见下面的例子),但我失败了。
我的方法中的错误在哪里?
编辑1 (2017年7月17日)
AdminHub的目标:为应用程序中的特定客户端提供服务器端点,以调用刷新浏览器的客户端功能(强制在没有缓存的情况下重新加载)。 我设法构建了一个可以独立运行的ASP.NET应用程序:
AdminHub.cs
using Microsoft.AspNet.SignalR;
namespace HelloSignalR
{
public class AdminHub : Hub
{
Clients.All.refresh();
}
}
的index.html
<!DOCTYPE html>
<html>
<head>
<title>Admin App of SignalR</title>
<meta charset="utf-8" />
<script type="text/javascript" src="/Scripts/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="/Scripts/jquery.signalR-2.2.2.min.js"></script>
<script type="text/javascript" src="/signalr/hubs"></script>
<script type="text/javascript" src="/Scripts/Admin.js"></script>
</head>
<body>
<h1>Admin Page for Reload all clients</h1>
<button id="refreshButton">Refresh without cache</button>
</body>
</html>
Startup.cs
using Microsoft.Owin;
using Owin;
using Microsoft.AspNet.SignalR;
[assembly: OwinStartup(typeof(HelloSignalR.Startup))]
namespace HelloSignalR
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(new HubConfiguration());
}
}
}
Admin.js
(function () {
$(document).ready(function () {
// Thereby browsers reload pretty quickly,
// output an alert for the user, that he gets noticed about refresh
alert("I'm loaded or reloaded.");
// Target function of broadcasting via SignalR to all
$.connection.adminHub.client.refresh = function() {
window.location.reload(true); // forcing to forget about browser cache
}
// if the hub has been loaded, register click handler
// if clicked refresh everywhere (without browser cache)
$.connection.hub.start().done(function () {
$("#refreshButton").click(function () {
alert("Button clicked!");
$.connection.adminHub.server.reloadAll();
})
});
});
})();
对于第三方插件,我只在程序集中包含AdminHub.cs,因为其余部分是无用的:我想要扩展的软件在开始时成功地映射了自己的集线器,但不是我的。
我感谢任何技巧或变通方法......