Signalr webforms asp.net和Signal仅在一个页面中工作
我开发了一个webforms asp.net站点,该站点使用signalr进行实时通信 我已定义了与信号机相关的所有内容的master.pageSignalr webforms asp.net和Signal仅在一个页面中工作,signalr,Signalr,我开发了一个webforms asp.net站点,该站点使用signalr进行实时通信 我已定义了与信号机相关的所有内容的master.page <%: Scripts.Render("~/Scripts/jquery-1.11.0.min.js") %> <%: Scripts.Render("~/Scripts/jquery.signalR-2.0.3.min.js") %> <%: Scripts.Render("~/signalr/h
<%: Scripts.Render("~/Scripts/jquery-1.11.0.min.js") %>
<%: Scripts.Render("~/Scripts/jquery.signalR-2.0.3.min.js") %>
<%: Scripts.Render("~/signalr/hubs") %>
一切都好
然后我尝试将对signalR hub的访问扩展到其他页面,包括母版页
所以,我把它放在主页上的master direct中:
<script type="text/javascript">
$(function () {
$.connection.hub.start()
.done(function () {
console.log('Now connected MASTER, connection ID=' + $.connection.hub.id);
});
});
</script>
$(函数(){
$.connection.hub.start()
.done(函数(){
log('Now connected MASTER,connection ID='+$.connection.hub.ID);
});
});
一切正常,但客户端连接了两次,但连接ID相同。是否有任何方法可以只连接一次并在母版页和内容页之间共享HubProxy
但是,当我尝试基于该主控形状呈现另一个内容页时,出现了一个错误“hub未定义”
唯一可以与该母版页配合使用的页面是第一个将js与Signal分离的页面
以下是所需的集线器代码:
public class GameHub : Hub
{
private const long tempoJogada = 30000;
private const long tempoTruco = 30000;
private const long tempoMao11 = 30000;
private readonly static Model.Truco _truco = new Model.Truco();
private Mesa _mesa;
private static int JogadoresOnline = 0;
public GameHub()
{
_mesa = _truco.Saloes[0].Mesas[0];
Debug.WriteLine("criou hub : " + DateTime.Now);
}
public List<Jogador> RetornaJogadoresMesa()
{
return _mesa.Jogadores;
}
public async Task<int> EntrarMesa(Jogador jogador)
{
int posicaoMesa = 0;
Jogador jogadorServer = _mesa.Jogadores.SingleOrDefault(jo => jo.Nome == jogador.Nome);
jogador.ClientGuid = new Guid(Context.ConnectionId);
if (_mesa.Jogadores.Count(jo => jo.Nome == jogador.Nome) == 0)
{
posicaoMesa = _mesa.EntrarMesa(jogador);
if (posicaoMesa > 0)
{
await Groups.Add(Context.ConnectionId, _mesa.NomeMesa);
Clients.Group(_mesa.NomeMesa).entrarMesa(jogador.Nome, posicaoMesa);
}
if (_mesa.QuantidadeVagas == 0)
{
IniciarJogo();
}
}
else
{
// ja estava na mesa (reconectando)
await Groups.Add(Context.ConnectionId, _mesa.NomeMesa);
if (jogadorServer != null)
posicaoMesa = _mesa.Jogadores.IndexOf(jogadorServer) + 1;
}
return posicaoMesa;
}
private void IniciarJogo()
{
EnviaCartas(true);
_mesa.EstaJogando = true;
}
.
.
.
.
}
公共类游戏中心:中心
{
私人建筑长坦波约加达=30000;
私人康斯特朗·坦波特鲁科=30000;
私人常数长tempoMao11=30000;
私有只读静态模型.Truco _Truco=新模型.Truco();
私人梅萨(美萨),;
私有静态int JogadoresOnline=0;
公共游戏中心()
{
_mesa=_-truco.Saloes[0].mesa[0];
Debug.WriteLine(“criou hub:+DateTime.Now”);
}
公开名单
{
返回_mesa.Jogadores;
}
公共异步任务entramesa(Jogador-Jogador)
{
int posicaoMesa=0;
Jogador jogadorServer=_mesa.Jogadores.SingleOrDefault(jo=>jo.Nome==Jogador.Nome);
jogador.ClientGuid=新Guid(Context.ConnectionId);
if(_mesa.Jogadores.Count(jo=>jo.Nome==jogador.Nome)==0)
{
posicaoMesa=_mesa.entramesa(jogador);
如果(posicaoMesa>0)
{
等待组。添加(Context.ConnectionId,_mesa.NomeMesa);
客户群(_-mesa.NomeMesa).entramesa(jogador.Nome,posicaoMesa);
}
如果(_mesa.QuantidadeVagas==0)
{
IniciarJogo();
}
}
其他的
{
//ja estava na mesa(重新连接)
等待组。添加(Context.ConnectionId,_mesa.NomeMesa);
if(服务器!=null)
posicaoMesa=_mesa.Jogadores.IndexOf(jogadorServer)+1;
}
返回posicaoMesa;
}
私有无效IniciarJogo()
{
EnviaCartas(真实);
_mesa.EstaJogando=真;
}
.
.
.
.
}
有什么建议吗
谢谢我不确定这是否是原因,但我认为这可能与您引用脚本的方式有关,对我来说,这就是它的工作方式: 1。定义hubs.js 使用来自的解决方案 定义一个名为hubs.js的js文件,其中包含
(function ($) {
$.ajax({
url: "/signalr/hubs",
dataType: "script",
async: false
});
}(jQuery));
2。定义捆绑包
在BundleConfig.cs中
如果您有
前导“/”使url始终指向根
http://domain/signalr/hubs
但如果没有它,它将指向托管文件夹
http://domain/yourAppFolder/signalr/hubs
我不确定这是原因,但我认为可能与您引用脚本的方式有关,对我来说,这就是它的工作方式:
1。定义hubs.js
使用来自的解决方案
定义一个名为hubs.js的js文件,其中包含
(function ($) {
$.ajax({
url: "/signalr/hubs",
dataType: "script",
async: false
});
}(jQuery));
2。定义捆绑包
在BundleConfig.cs中
如果您有
前导“/”使url始终指向根
http://domain/signalr/hubs
但如果没有它,它将指向托管文件夹
http://domain/yourAppFolder/signalr/hubs
为什么您只想有一个连接?母版页中的代码只提供了在所有页面中共享代码的便利,SignalR javascript api是可用的,这样页面之间的实时通信是可能的,如果这不是您需要的,也许您应该使用服务层ROK进行连接,但我的问题是,当将脚本插入到母版时,由此派生的每个内容页都会得到“hub未定义”。正如我提到的,我启动的第一个内容页正在工作。谢谢,为此,请发布中心代码,以再现问题部分中心代码如上所示。再次感谢,这让我抓狂你为什么只想有一个连接?母版页中的代码只提供了在所有页面中共享代码的便利,SignalR javascript api是可用的,这样页面之间的实时通信是可能的,如果这不是您需要的,也许您应该使用服务层ROK进行连接,但我的问题是,当将脚本插入到母版时,由此派生的每个内容页都会得到“hub未定义”。正如我提到的,我启动的第一个内容页正在工作。谢谢,为此,请发布中心代码,以再现问题部分中心代码如上所示。再次感谢,这让我发疯。非常感谢你的回答。我只是不让脚本出错和缩小,以使场景更简单,但实际上它似乎真的与脚本有关。所以我按照你的指示放回了blundle,结果改变了,现在master中的脚本连接到了hub,但是它说“HubProxy现在未定义”,顺便说一句,我首先开发的页面仍然没有任何问题(奇怪)。我明天会深入调查,试图找出答案。谢谢again@gilberto不客气,可能是因为你的应用程序结构,你定义脚本的方式在页面中工作,而不是在主控中工作,比如在根目录中的页面,但在文件夹中的主控…等等
(function ($) {
$.ajax({
url: "signalr/hubs",
dataType: "script",
async: false
});
}(jQuery));
http://domain/signalr/hubs
http://domain/yourAppFolder/signalr/hubs