当我使用强类型集线器时遇到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;不具有 实施。
我还没有能够缩小导致此异常的确切原因。一点帮助或建议将不胜感激。
答案 0 :(得分:0)
好像SignalR正在使用反射来查找实现类的IClientCallback
实例化它,但一无所获
答案 1 :(得分:0)
花了几个小时的调试才能弄清楚问题出在通用方法定义中。似乎根本不支持。
因此,作为一种解决方法,可以将msg
参数的类型更改为object
,并使callback
方法不是通用的。进行此更改后,一切都应正常工作。
我希望微软至少会在文档中添加有关此限制的警告。