C# 在Microsoft Edge中时,信号器无法接收广播

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() 有什么想法吗?

当我们在Microsoft Edge时,从中心获取消息时遇到问题

连接已建立,从客户端->服务器发送消息的工作方式与预期一致,但我们没有收到来自服务器推送的任何响应。同样的代码也适用于Chrome和Firefox

下面是我们正在使用的一些代码:

JS:

C#:

虽然我们并非完全无法100%的时间接收任何广播,但它确实有95%的时间发生

虽然我们无法从服务器接收任何广播,但来自客户机->服务器的后续请求按预期工作

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";
}