信号组件加载问题
本文关键字:问题 加载 组件 信号 | 更新日期: 2023-09-27 18:12:47
尝试在Microsoft.AspNet.SignalR.Owin
程序集中加载类时出现此错误。
在startup.cs
中留下Configuration
方法后抛出异常。我已经注册了一个全局异常处理程序来尝试捕获异常,但它没有被捕获。
public async override Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
{
var exception = context.Exception;
const string genericErrorMessage = "An unexpected error occured";
var response = context.Request.CreateResponse(HttpStatusCode.InternalServerError,
new
{
Message = genericErrorMessage
});
response.Headers.Add("X - Error & ", genericErrorMessage);
context.Result = new ResponseMessageResult(response);
}
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
全局中的Application_Error方法。Asax也没有捕捉到
protected void Application_Error(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
KeyValuePair<string, object> error = new KeyValuePair<string, object>("ErrorMessage", ctx.Server.GetLastError().ToString());
ctx.Response.Clear();
}
我试着重新安装程序集,但是没有用。
关于SO还有两个问题但没有答案
尽管将Visual studio配置为在每种可能的异常类型上都中断,但这仍然没有被捕获。我能告诉异常发生的唯一地方是在输出窗口中。事件日志中不记录任何内容。
对于信息,这是使用VS 2015
编辑:我正在运行所有最新的Signalr软件包SignalR。ReflectedHubDescriptorProvider Warning: 0:部分Microsoft.AspNet.SignalR. .= 1.2.2.0 Owin,版本,文化=中性,PublicKeyToken=31bf3856ad364e35"无法加载搜索hub时。[…' Microsoft.AspNet.SignalR.Owin.dll]
原始异常类型:ReflectionTypeLoadException
原始异常消息:无法加载一个或多个请求的类型。获取LoaderExceptions属性获取更多信息信息。
已安装的signalr相关包
Autofac。SignalR v 3.0.2
Microsoft.AspNet。SignalR v2.2.0
Microsoft.AspNet.SignalR。核心v2.2.0
Microsoft.AspNet.SignalR.JS v2.2.0
Microsoft.AspNet.SignalR。Owin v1.2.2
Microsoft.AspNet.SignalR。SelfHost v2.2.0
Microsoft.AspNet.SignalR。SystemWeb v2.2.0
您看到的是由:ReflectedHubDescriptorProvider创建的日志条目
102 try
103 {
104 return a.GetTypes();
105 }
106 catch (ReflectionTypeLoadException ex)
107 {
108 _trace.TraceWarning("Some of the classes from assembly '"{0}'" could Not be loaded when searching for Hubs. [{1}]'r'n" +
109 "Original exception type: {2}'r'n" +
110 "Original exception message: {3}'r'n",
111 a.FullName,
112 a.Location,
113 ex.GetType().Name,
114 ex.Message);
116 return ex.Types.Where(t => t != null);
117 }
该异常可能是由一个加载的程序集中缺少依赖项引起的,信号代码正在迭代所有程序集。因此,原因可以在任何当前加载的程序集中。有趣的是:在一个程序集中获取所有类型和如何在调用assembly-gettypes时防止reflectiontypeloadeexception解释了ReflectedHubDescriptorProvider中使用的try - catch构造。它只是忽略了它不能从microt.aspnet . signalr . owin程序集加载的类/集线器。
ReflectionTypeLoadException包含一个LoaderExceptions,要访问它,你可以下载源代码并在ex.LoaderExceptions中添加跟踪,或者在源代码中添加一个断点。
我通过创建一个新项目并将所有内容复制到新项目/重新安装软件包来"修复"这个问题。
我不再得到这个错误,但是我的Signalr问题并没有消失,所以看起来这是一个转移注意力的问题。
很高兴听到你设法修复程序集加载问题。这里有一些建议可以帮助你让它运行起来!
启用日志
要排除SignalR问题,最好的方法是启用服务器&客户端日志。
客户端:
$.connection.hub.logging = true;
$.connection.hub.start();
服务器端:
var hubConnection = new HubConnection("http://www.contoso.com/");
hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = Console.Out;
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub");
stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price));
await hubConnection.Start();
以下是完整的说明:
http://www.asp.net/signalr/overview/testing-and-debugging/enabling-signalr-tracing检查你的代码并排除问题
下面是一些你应该检查的常见错误:
- 方法拼写错误、方法签名错误或集线器名称错误;
- 在客户端重复方法名;
- 混合Hub和PersistentConnection语法;
- 订阅添加前连接已启动;
- 集线器代理上缺少方法名;
- Hub或Hub方法未声明为Public;
- 手动序列化数据;
- 已达到连接限制;
- 跨域连接未正确设置;
下面是一篇关于如何用代码示例解决SignalR问题的完整文章:http://www.asp.net/signalr/overview/testing-and-debugging/troubleshooting
你必须用这个命令升级我的Microsoft.Owin.Security包到2.1.0
Install-Package microsoft . win. security -Version 2.1.0
并像这样修改我的App.config中的绑定
& lt;assemblyIdentity name = " Microsoft.Owin。Security" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
& lt;bindingRedirect oldVersion ="0.0.0.0-2.1.0.0"新版本= " 2.1.0.0 "/>