SignalR不会调用seconf Hub类

时间:2015-06-19 20:25:05

标签: c# signalr

我的项目中有2个Hub类

public class FolderManager : Hub
{
  public FolderManager()
  {
  }
    public void Validator()
    {
    }
}

public class SeoContentValidator : Hub
{
    public SeoContentValidator()
    {

    }
    public void Validator()
    {
    }
}

我有我的Start Class

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.MapSignalR();
    }
}

在我看来,我有这个脚本

<script src="~/Scripts/jquery.signalR-2.2.0.js" type="text/javascript"></script>
<script src="~/signalr/hubs" type="text/javascript"></script>

<script>
  jQuery(document).ready(function(){
    var folderManager = $.connection.folderManager;
    var seoContentValidator = $.connection.seoContentValidator;
    $.connection.hub.logging = true;
     $.connection.hub.start().done(function () {
        folderManager.server.validator();
        seoContentValidator.server.validator();
    });

  });
</script>

我遇到的问题是signalR可以找到并调用folderManager.server.validator();

但是找不到seoContentValidator.server.validator();

我在SeoContentValidator中做错了,signalR无法找到它

1 个答案:

答案 0 :(得分:0)

这应该可以正常工作。事实上,我试过你的例子。 我的signalr / hubs生成的代理具有以下代码:

    proxies['folderManager'] = this.createHubProxy('folderManager'); 
    proxies['folderManager'].client = { };
    proxies['folderManager'].server = {
        validator: function () {
            return proxies['folderManager'].invoke.apply(proxies['folderManager'], $.merge(["Validator"], $.makeArray(arguments)));
         }
    };

    proxies['seoContentValidator'] = this.createHubProxy('seoContentValidator'); 
    proxies['seoContentValidator'].client = { };
    proxies['seoContentValidator'].server = {
        validator: function () {
            return proxies['seoContentValidator'].invoke.apply(proxies['seoContentValidator'], $.merge(["Validator"], $.makeArray(arguments)));
         }
    };

开始时我的js日志声明:

    [ ... ] SignalR: Invoking foldermanager.Validator
    [ ... ] SignalR: Invoking seocontentvalidator.Validator

我还在hub方法上设置了断点,并在调试模式下运行应用程序。两个断点都被触发。

我复制的JS代码是否存在于生成的代理文件中? 运行时没有JS错误?

我认为您编写的示例代码不是您的实际代码。尝试调试代码,也使用详细的错误消息:

    public class Startup {
        public void Configuration(IAppBuilder app) {
            var hubConfiguration = new HubConfiguration();
            hubConfiguration.EnableDetailedErrors = true;
            app.MapSignalR(hubConfiguration);
        }
    }

将您的集线器方法包装在try-catch块中,它可以提供很多帮助。

如果您发现问题,请告诉我。