信号组件加载问题

本文关键字:问题 加载 组件 信号 | 更新日期: 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。ReflectedHubDescriptorProvider Warning: 0:部分Microsoft.AspNet.SignalR. .= 1.2.2.0 Owin,版本,文化=中性,PublicKeyToken=31bf3856ad364e35"无法加载搜索hub时。[…' Microsoft.AspNet.SignalR.Owin.dll]

原始异常类型:ReflectionTypeLoadException

原始异常消息:无法加载一个或多个请求的类型。获取LoaderExceptions属性获取更多信息信息。

编辑:我正在运行所有最新的Signalr软件包

已安装的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 "/>