Deployment 将信号器通知中心部署到IIS时出现CORS错误

Deployment 将信号器通知中心部署到IIS时出现CORS错误,deployment,iis-7,signalr,signalr-hub,Deployment,Iis 7,Signalr,Signalr Hub,我的signalR Hub可以在安全端口44311上的VS2019调试模式下正常运行,但只要我将其发布到我的开发设备上的本地IIS,。/Hub/协商就会失败,并出现CORS策略异常 ex.在调试模式下,IIS托盘 信号集线器正常启动: 现在转到本地Window 10 IIS设置,我在其中部署了signalR Hub项目: 我设置了https绑定 我已成功设置SSL证书,并设置了“需要SSL”复选框: 我重新启动我的IIS网站,浏览44311进行测试 但果不其然,我的应用程序无法连接到

我的signalR Hub可以在安全端口44311上的VS2019调试模式下正常运行,但只要我将其发布到我的开发设备上的本地IIS,
。/Hub/协商
就会失败,并出现
CORS策略
异常

ex.在调试模式下,IIS托盘

信号集线器正常启动:


现在转到本地Window 10 IIS设置,我在其中部署了signalR Hub项目:

  • 我设置了https绑定
  • 我已成功设置SSL证书,并设置了“需要SSL”复选框:
  • 我重新启动我的IIS网站,浏览44311进行测试
  • 但果不其然,我的应用程序无法连接到集线器:

    访问位于的XMLHttpRequest'https://localhost:44311/hub/negotiate?negotiateVersion=1“起源”http://localhost:4200'已被CORS策略阻止:

    对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标题。

    POSThttps://localhost:44311/hub/negotiate?negotiateVersion=1 net::ERR_失败


    然而在我的代码中,我注入了CORS:

    使用Microsoft.AspNetCore.Builder;
    使用Microsoft.AspNetCore.Hosting;
    使用Microsoft.AspNetCore.Http;
    使用Microsoft.AspNetCore.Http.Connections;
    使用Microsoft.Extensions.DependencyInjection;
    使用Microsoft.Extensions.Hosting;
    使用NotificationHub.Hubs;
    命名空间通知中心
    {
    公营创业
    {
    只读字符串MyAllowedSpecificOrigins=“\u MyAllowedSpecificOrigins”;
    public void配置服务(IServiceCollection服务)
    {
    services.AddCors(选项=>
    {
    options.AddPolicy(名称:MyAllowedSpecificOrigins,
    生成器=>{
    建筑商。来源(“https://localhost:4200“,“本地主机:4200”)
    .SetIsOriginAllowedToAllowWildcardSubdomains()的
    .AllowAnyHeader()
    .AllowAnyMethod()
    .AllowCredentials()
    .SetIsOriginAllowed((主机)=>true);
    }
    );
    });
    services.AddSignalR(hubOptions=>{
    hubOptions.EnableDetailedErrors=true;
    hubOptions.KeepAliveInterval=System.TimeSpan.FromMinutes(1000);
    });            
    }
    //此方法由运行时调用。请使用此方法配置HTTP请求管道。
    public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
    {
    app.UseHttpsRedirection();
    app.UseRouting();
    应用程序UseCors(MyAllowedSpecificOrigins);
    if(env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }
    //app.UseSession();
    app.UseEndpoints(端点=>
    {           
    endpoints.MapHub(“/hub”,选项=>{
    options.Transports=HttpTransportType.WebSockets | HttpTransportType.LongPolling;
    });
    endpoints.MapGet(“/”,异步上下文=>
    {
    wait context.Response.WriteAsync(“通知中心已启动!”);
    });
    });
    }
    }
    
    }
    确保已启用iis.net功能。在iis中为站点启用目录浏览:

    1) 启动IIS管理器

    2) 在IIS管理器中,展开服务器名称,展开网站,然后选择网站

    3) 在功能视图中,双击目录浏览

    4) 在操作窗格中,单击启用

    在web.config文件中添加以下代码:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="http://my-external-app-domain.com" />
        <add name="Access-Control-Allow-Credentials" value="true" />
        <add name="Access-Control-Request-Headers" value="User-Agent,Content-Type,Authorization,X-RequestDigest,X-ClientService-ClientTag" />
        <add name="Access-Control-Request-Method" value="GET,POST,HEAD,OPTIONS" />
      </customHeaders>
    </httpProtocol>
    </system.webServer>
    
    
    

    更新:

    将以下内容添加到web.config:


    “访问控制请求头”中都需要HttpRequest和x-Request-with。此外,我插入了与请求标头具有相同值的标头name=“Access Control Allow Headers”。

    您的问题解决了吗?如果您的问题得到解决,那么我请求您将有用的建议标记为答案。这将帮助其他面临同样问题的人。如果你的问题仍然存在,那么试着参考社区成员给出的解决方案。@JalpaPanchal-你是对的。但发生的事情是,在尝试使用ssl和digi证书部署我的整个开发解决方案后,我破坏了它。然后,7月4日假期到来,我终于重建了我的开发环境。我必须尽快在本地部署端重新讨论这个问题。为了解决CORS错误,我修改了web.config CustomHeaders部分。在
    “访问控制请求头”
    中都需要HttpRequest和x-Request-with。此外,我插入了与Request-Headers值相同的header
    name=“Access Control Allow Headers”
    。仅供参考:我已经按照建议安装了CORS模块。这是我在向web.confg添加标题之前的第一步。至此,我的cors问题已解决,谢谢。现在我面临的问题是,我的前端
    http://localhost:55271/hub/negotiate?negotiateVersion=1
    在IIS中心网站运行时抛出
    404未找到
    。如果在vs2019调试模式下运行(并在IIS中关闭集线器站点),则连接集线器时不会出现问题。也许是单独发布的吧?Jalpa-plesae请参阅我在帖子中的更新部分。那里的web.config值对我有用。请相应更新您的答案;再次感谢您的帮助。@bob.mazzo当然我会更新我的帖子。对于这个新问题,您可以生成新帖子。