次のパッケージが Azure ワーカー ロールにインストールされている場合:
<package id="Microsoft.AspNet.WebApi.Client" version="5.1.0" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.1.0" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.OData" version="5.1.0" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.1.0" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.1.0" targetFramework="net451" />
<package id="Microsoft.Data.Edm" version="5.6.0" targetFramework="net451" />
<package id="Microsoft.Data.OData" version="5.6.0" targetFramework="net451" />
<package id="Microsoft.Data.Services.Client" version="5.6.0" targetFramework="net451" />
<package id="Microsoft.Owin" version="2.0.2" targetFramework="net451" />
<package id="Microsoft.Owin.Host.HttpListener" version="2.0.2" targetFramework="net451" />
<package id="Microsoft.Owin.Hosting" version="2.0.2" targetFramework="net451" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.3" targetFramework="net451" />
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net451" />
<package id="Owin" version="1.0" targetFramework="net451" />
<package id="RavenDB.Client" version="2.5.2750" targetFramework="net451" />
<package id="System.Spatial" version="5.6.0" targetFramework="net451" />
<package id="Unity" version="3.0.1304.1" targetFramework="net451" />
<package id="Unity.WebAPI" version="5.1" targetFramework="net451" />
<package id="WindowsAzure.Storage" version="3.0.2.0" targetFramework="net451" />
IoC コンテナーを登録しようとしない限り、アプリケーションを動作させることができます。
この行を Startup.cs ファイルに挿入するとすぐに、次のようになります。
config.DependencyResolver = new UnityDependencyResolver(new UnityContainer());
次の例外が発生します。
タイプ 'System.Reflection.TargetInvocationException' の未処理の例外が Microsoft.WindowsAzure.ServiceRuntime.dll で発生しました
まったく同じコードをコンソール アプリケーションに配置すると、例外をスローすることなく動作します。これが私の WorkerRole.cs クラスの完全な内容です。
public class WorkerRole : RoleEntryPoint
{
IDisposable _app;
public override void Run()
{
Trace.TraceInformation("Timbre.Catalogue.ApiRole entry point called");
while (true)
{
Thread.Sleep(10000);
Trace.TraceInformation("Working");
}
}
public override bool OnStart()
{
ServicePointManager.DefaultConnectionLimit = 12;
var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["ApiEndpoint"];
var baseUri = string.Format("{0}://{1}", endpoint.Protocol, endpoint.IPEndpoint);
Trace.TraceInformation("Starting OWIN at {0}", baseUri);
_app = WebApp.Start<Startup>(new StartOptions(baseUri));
return base.OnStart();
}
public override void OnStop()
{
if (_app != null)
_app.Dispose();
base.OnStop();
}
}
彼女のは、私の Startup.cs クラスの完全なコンテンツです。
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.MapHttpAttributeRoutes();
config.DependencyResolver = new UnityDependencyResolver(new UnityContainer());
app.UseWebApi(config);
}
}
次のパッケージで Castle.Windsor を使用しようとすると、同じ問題が発生します。
<package id="WebApiContrib.IoC.CastleWindsor" version="0.10.0.0" targetFramework="net451" />
代わりにこのコード行:
config.DependencyResolver = new WindsorResolver(new WindsorContainer().Install(FromAssembly.This()));
ここで何が間違っているのか、誰かが私に手がかりを与えることができますか? コンソール アプリケーションで完全に動作するため、Azure コンピューティング エミュレーターに問題があると思われますが、それ以上の診断方法はわかりません。