SignalR强类型集线器TypeLoadException

时间:2015-11-14 01:46:09

标签: c# signalr signalr-hub

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

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

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

My 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方法&#39;回调&#39;在类型   &#39; Microsoft.AspNet.SignalR.Hubs.TypedClientBuilder.IClientCallbackImpl&#39;   来自assembly&#39; Microsoft.AspNet.SignalR.Hubs.TypedClientBuilder,   Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null&#39;不具有   实施。

我还没有能够缩小导致此异常的确切原因。一点帮助或建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

好像SignalR正在使用反射来查找实现类的IClientCallback实例化它,但一无所获

答案 1 :(得分:0)

花了几个小时的调试才能弄清楚问题出在通用方法定义中。似乎根本不支持。

因此,作为一种解决方法,可以将msg参数的类型更改为object,并使callback方法不是通用的。进行此更改后,一切都应正常工作。

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