初期のバージョンから SignalR を使用しており、途中でアップグレードしましたが、アプリケーションを Windows Server 2008 R2 運用サーバーに展開したところ、「ハブを解決できませんでした」というメッセージが表示されてアプリがクラッシュしました。例外。
編集: StackTrace 追加:
[InvalidOperationException: 'stockitems' Hub could not be resolved.]
Microsoft.AspNet.SignalR.Hubs.HubManagerExtensions.EnsureHub(IHubManager hubManager, String hubName, IPerformanceCounter[] counters) +426
Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Initialize(IDependencyResolver resolver, HostContext context) +716
Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary`2 environment) +1075
Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary`2 environment) +363
Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute() +68
Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object extraData) +414
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
Microsoft.Owin.Host.SystemWeb.CallContextAsyncResult.End(IAsyncResult result) +146
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
私の開発マシンとローカル テスト サーバーでは、問題は発生していません。
問題のハブは非常に単純です。
[HubName("StockItems")]
public class StockItemHub : Hub
{
}
もともと HubName の問題だと思っていたので削除しましたが、それでも爆発します。
もともと依存性注入が原因だと思っていたので、Global.asax を次のように変更しました。
var signalRResolver = new SignalRDependencyResolver();
GlobalHost.DependencyResolver = signalRResolver;
var configuration = new HubConfiguration { Resolver = signalRResolver };
RouteTable.Routes.MapHubs(configuration);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters, config.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
編集: SignalRDependencyResolver とは何ですか? この問題を解決しようとするまで、SignalRDependencyResolver は存在しませんでした。依存性注入の問題だと思うので、DefaultDependencyResolver をラップして GetService と GetServices をオーバーライドし、最初に Ninject カーネルのタイプをチェックし、そうでない場合は DefaultDependencyResolver にフォールバックします
何か案は?
サーバーは IIS7、.Net 4.5 を搭載した Windows Server 2008 を実行しています アプリケーションは MVC 4 .Net 4.5 です