信号器/集线器404与system.webServer / modules

时间:2015-09-17 16:19:03

标签: asp.net signalr signalr-hub signalr.client

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

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

现在当我将Signalr添加到这个网站时,它给了我404.后来我注意到删除URLHandler模​​块使信号器工作。

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

我无法删除URLHandler,因为它长时间管理大量页面。那么我怎么能让Signalr和URLHandler一起工作呢?

2 个答案:

答案 0 :(得分:0)

这是因为它因为更改网址而无法找到生成的代理(var connection = $.hubConnection(); var contosoChatHubProxy = connection.createHubProxy('contosoChatHub'); )?如果是这样,请尝试使用自己的代理(没有生成代理的代码),即:

而不是:

protected JSONObject doInBackground(String... args) {

    JSONObject json = null;

    GCMRegistrar.checkDevice(context);
    GCMRegistrar.checkManifest(context);
    final String regId = GCMRegistrar.getRegistrationId(context);

    if (regId.equals("")) {        
       GCMRegistrar.register(context,SENDER_ID);
    } else {
       if (GCMRegistrar.isRegisteredOnServer(context)) {               
           Toast.makeText(getApplicationContext(), "Already registered with GCM", Toast.LENGTH_LONG).show();
       } else {
            UserFunctions userFunction = new UserFunctions();
            json = userFunction.registerUser(context,fname, lname, email, password,regId);
       }
    }

    return json;
}

使用:

dplyr

请参阅示例,不使用生成的代理,请在此处阅读:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#genproxy

答案 1 :(得分:0)

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

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

我还尝试使用生成的代理,但它可能有效,但它不像聊天中心那样直接/有用,如chatHub.server&amp; chatHub.client不可用,需要更改完整的代码。