SignalR强类型集线器TypeLoadException

问题描述 投票:5回答:2

当我使用强类型集线器时,我遇到了TypeLoadException。我的界面是:

public interface IClientCallback
{
    void callback<T>(T msg, string eventType);
    void test(string msg, string eventType); 
}

所有方法都在单个接口中,并且接口不从任何其他接口继承。

我的Hub类是:

public class ServiceHub : Hub<IClientCallback>
{
    public static readonly string ServiceHubName = "ServiceHub";

    public void Register(string name, string eventType)
    {
        Clients.All.test("hello", "world");
    }
}

当我使用我的客户端应用程序在集线器上调用Register方法时,在Hub应用程序上,当它在Clients.All.test(...)时收到异常:

TypeLoadException方法'Microsoft.AspNet.SignalR.Hubs.TypedClientBuilder.IClientCallbackImpl'中的方法'callback'来自程序集'Microsoft.AspNet.SignalR.Hubs.TypedClientBuilder,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'没有一个实现。

我无法缩小导致此异常的确切原因。一点帮助或建议将不胜感激。

c# signalr signalr-hub
2个回答
0
投票

看起来像SignalR正在使用反射找到哪个类实现IClientCallback来实例化它,但一无所获


0
投票

需要几个小时的调试才能确定问题出在通用方法定义中。好像它根本不支持。

因此,作为一种解决方法,可以将msg参数的类型更改为object,并使callback方法不通用。在这一改变之后,一切都应该有效。

我希望微软至少会在文档中添加关于此限制的警告。

© www.soinside.com 2019 - 2024. All rights reserved.