I'm getting this error when attempting to load classes in the Microsoft.AspNet.SignalR.Owin
assembly.
The exception is thrown after execution leaves the Configuration
method in startup.cs
. I've registered a Global Exception Handler to try and catch the exception but it is not being caught.
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());
the Application_Error method in Global.asax doesn't catch it either
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();
}
I've tried reinstalling the assembly but to no avail.
There's two other questions on SO but no solutions
Despite configuring Visual studio to break on every possible type of exception, this is still not being caught. The only place i can tell an exception has occurred is in the output window. Nothing is logged to the event logs.
For info this is using VS 2015
SignalR.ReflectedHubDescriptorProvider Warning: 0 : Some of the classes from assembly "Microsoft.AspNet.SignalR.Owin, Version=1.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" could Not be loaded when searching for Hubs. [...\Microsoft.AspNet.SignalR.Owin.dll]
Original exception type: ReflectionTypeLoadException
Original exception message: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
EDIT: I'm running all the latest Signalr packages
Installed signalr related packages
Autofac.SignalR v 3.0.2
Microsoft.AspNet.SignalR v2.2.0
Microsoft.AspNet.SignalR.Core 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
To specify the OWIN startup Assembly, Class, or Method, add the appSetting owin:AppStartup with the fully qualified startup class or configuration method name in your web.config. So if we update the web.config file, add new key “<add key=”owin:AutomaticAppStartup” value=”false” />” in <appSettings> in the <configuration> section.
This error may occur if the client does not support the transports that SignalR uses. See Transports and Fallbacksfor information on which browsers can be used with SignalR. "JavaScript Hub proxy generation has been disabled."
In a SignalR application, the server has no information about the methods that the client implements; when the server invokes a client method, the method name and parameter data are sent to the client, and the method is executed only if it exists in the format that the server specified.
Binding redirects not getting added automatically for worker role projects. The reason for this failure is SignalR/WebAPI binaries are built with a dependency over Microsoft.Owin version 2.0.0. But the latest available version of Microsoft.Owin in the public feed is > 2.0.0.
What you are seeing is a log entry create by: 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 }
The exception can be caused by a missing dependency in one of the loaded assemblies, the signalr code is iterating all your assemblies. So the cause can be in any of currently loaded assembles. Interesting :get-all-types-in-an-assembly and how-to-prevent-reflectiontypeloadexception-when-calling-assembly-gettypes explains the try catch construction used in the ReflectedHubDescriptorProvider. It is just ignoring the classes/hubs it can't load from the Microsoft.AspNet.SignalR.Owin assembly.
The ReflectionTypeLoadException contains a LoaderExceptions, to access it you can download the source code and add tracing on the ex.LoaderExceptions or add a breakpoint in the sourcecode.
I 'fixed' this problem by creating a new project and copying everything over to the new one/ reinstalling packages again.
I no longer get this error, but my Signalr problems have not gone away, so it looks like this one was a red herring.
Glad to hear that you managed to fix assembly loading issue. Here are some tips that might help you get it running!
Enable logging
To troubleshoot SignalR problems the best thing to do is to enable server & client side logging.
Client side:
$.connection.hub.logging = true;
$.connection.hub.start();
Server side:
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();
Here are full instructions:
http://www.asp.net/signalr/overview/testing-and-debugging/enabling-signalr-tracing
Check your code and troubleshoot the problem
Here is a list of common mistakes you should check:
Here is a full article on how to troubleshoot SignalR issues with code samples: http://www.asp.net/signalr/overview/testing-and-debugging/troubleshooting
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With