Signalr/hubs 404 系统。webServer/modules

Signalr/hubs 404 with system.webServer/modules

我有一个使用自定义 url 重写的旧网站,如下所示:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="URLHandler" type="Lib.URLHandler" preCondition="" />
    </modules>
</system.webServer>

现在,当我将 Signalr 添加到该网站时,它会显示 404。后来我注意到删除 URLHandler 模块可以使 Signalr 正常工作。

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
</system.webServer>

我无法删除 URLHandler,因为它长期以来一直在管理大量页面。那么如何让 Signalr 和 URLHandler 一起工作呢?

这是因为它找不到生成的代理(signalr/hubs)因为改变url?如果是这样,请尝试使用自己的代理(没有生成代理的代码)即:

而不是:

var contosoChatHubProxy = $.connection.contosoChatHub;

使用:

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');

查看不使用生成的代理的示例并继续阅读:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#genproxy

我找到了一个解决方案,我在 URLHandler 中添加了一行来完成这项工作。

void context_BeginRequest(object sender, EventArgs e)
  {
      if (HttpContext.Current.Request.Url.OriginalString.ToLower().Contains("signalr/hubs"))
           return;
      ..............
  }

我也尝试过使用生成的代理,它可能会起作用,但它不像 straight/helpful 那样,因为像 chatHub.server 和 chatHub.client 这样的聊天中心不可用并且需要更改完整代码。