C# 在Microsoft Edge中时,信号器无法接收广播
当我们在Microsoft Edge时,从中心获取消息时遇到问题 连接已建立,从客户端->服务器发送消息的工作方式与预期一致,但我们没有收到来自服务器推送的任何响应。同样的代码也适用于Chrome和Firefox 下面是我们正在使用的一些代码: JS: C#: 虽然我们并非完全无法100%的时间接收任何广播,但它确实有95%的时间发生 虽然我们无法从服务器接收任何广播,但来自客户机->服务器的后续请求按预期工作C# 在Microsoft Edge中时,信号器无法接收广播,c#,asp.net,signalr,microsoft-edge,signalr.client,C#,Asp.net,Signalr,Microsoft Edge,Signalr.client,当我们在Microsoft Edge时,从中心获取消息时遇到问题 连接已建立,从客户端->服务器发送消息的工作方式与预期一致,但我们没有收到来自服务器推送的任何响应。同样的代码也适用于Chrome和Firefox 下面是我们正在使用的一些代码: JS: C#: 虽然我们并非完全无法100%的时间接收任何广播,但它确实有95%的时间发生 虽然我们无法从服务器接收任何广播,但来自客户机->服务器的后续请求按预期工作 public override Task OnConnected() 有什么想法吗?
public override Task OnConnected()
有什么想法吗?这是信号机还是Edge的问题
p/S:我们正在使用jQuery3.3.1和Signalr2.3.0
更新1:
我们试图删除所有内容,并创建了一个空项目,以查看这是否是Signal的问题。很明显,如果这是一个全新的项目,signer没有这个问题,但在我实现表单身份验证后,问题开始出现,我猜是因为服务器试图向客户端广播消息时,它没有经过身份验证,或者没有设置cookie
下面是我们用来实现表单身份验证的代码:
Global.asax
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity identity)
{
FormsIdentity id = identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}
Web.Config
<authentication mode="Forms">
<forms name="LoginCookie" loginUrl="/Account/Login" protection="None" path="/" defaultUrl="/Account/Login" timeout="3600" />
</authentication>
Web.Config中阻止文件夹访问的代码
<location path="CMS/Admin" allowOverride="true">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</location>
示例页面位于/CMS/Admin中。尝试在以下位置更改您的c代码:
公共字符串广播消息(){
IHubContext context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.showMessage(“ABC”);
返回“你好世界”;
}
没有IHubContext context=GlobalHost.ConnectionManager.GetHubContext()代码>我无法与signalR一起工作如果他在浏览器中遇到问题,为什么这样做会起作用?在firefix中,它正在运行,因此他在其c#server部件中具有正确的hubcontext。对于这个错误的建议,我很抱歉,我将继续倾听,以获得一个好的答案
<authentication mode="Forms">
<forms name="LoginCookie" loginUrl="/Account/Login" protection="None" path="/" defaultUrl="/Account/Login" timeout="3600" />
</authentication>
<location path="CMS/Admin" allowOverride="true">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</location>
public string BroadcastMessage() {
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<myHub>();
context.Clients.All.showMessage("ABC");
return "Hello World";
}