「Azure SDK 2.3のせいだと思うのだが、AzureのOnStartの初期化が問題になった」
「2.2までは動いていたのが動かなくなったの?」
「そうだ」
「何が問題なの?」
「厳密には分からないが、base.OnStart()がキーであるようだ」
「親クラスを呼ぶかどうかってことだね」
「昨夜の段階で動いたコードと動かなかったコードだ」
「2.3になる前は他のパターンでも動いたわけだね?」
「そうだ。たぶんな」
OK? §
public override bool OnStart()
{
try
{
// 初期化コード
}
catch (Exception e)
{
System.Diagnostics.Trace.WriteLine("Exception OnStart:" + e);
}
return base.OnStart();
}
NG? (Case1) §
public override bool OnStart()
{
try
{
// 初期化コード
return base.OnStart();
}
catch (Exception e)
{
System.Diagnostics.Trace.WriteLine("Exception OnStart:" + e);
return false;
}
}
NG? (Case2) §
public override bool OnStart()
{
try
{
bool b = base.OnStart();
// 初期化コード
return b;
}
catch (Exception e)
{
System.Diagnostics.Trace.WriteLine("Exception OnStart:" + e);
return false;
}
}
感想 §
「Azure SDK 2.3は意外と非互換変更が多い感じだ。0.1バージョンが上がっただけとは思えない」
「それでもバージョンアップする意味があるの?」
「ある。結局nuget Hellを解決するには全てのモジュールを最新にするのが早道だからだ。それで解決できる保証はないけどな」
「nuget Hellってなに?」
「昔のDLL Hellみたいなものだ。nugetはバージョン依存性を解決してくれるように見えるが不完全だ。それにnugetを経由せずAzure SDK経由でアップグレードされちゃうモジュールもある。nugetは十分ではない」
「なんでそうなっちゃうわけ?」
「おそらく、DLL Hellで痛い目を見た経験が無い人たちが多数派になって無邪気に素晴らしい(かのように見える)アイデアに夢中になってまた地獄を作り出したってところだろう」
「そんなに地獄? 単に全部最新にすればいいだけではないの?」
「違うな。依存性で指定バージョンより上のモジュールが既に入っているという理由でアップデートが拒否されたモジュールもあった。何も考えずに最新にすらできない」
「より上のバージョンが既に入っていたからって。そんな理由で入らないのは酷いね」
「update-package -IgnoreDependencies (名前)のように、コマンドラインで依存性を無視してアップデートさせたよ。今のところちゃんと動いているようだ」
追記 §
「今のところちゃんと動いているようだと言ってしまったが、実はワーカーロールだけちゃんと動いていなかったので、修正した。続・AzureのOnStartの初期化順の問題 or ODataのバージョン問題参照のこと」
「Webページは動いていたわけだね」
「そうだ。上手くスタートはしていたが、そのあとのロール側の処理で躓いていた」