Azure App Service でホストされている ASP.NET MVC Web サイトでは、15 秒以上かかる要求に対して強制的にタイムアウトを設定したいと考えています。これは、私たちがテストしてきた、常に 15 秒以上かかる単純なアクション (つまり、無限ループ) です...
public ActionResult TimeoutTest()
{
var i = 1;
while (true)
{
i++;
}
return new HttpStatusCodeResult(200);
}
デフォルトでは、ブラウザーでそのアクションに対して GET を実行すると、2 分後に「500 - 要求がタイムアウトしました」というエラーが表示されます。これは、ApplicationHost.config の webLimits セクションの「connectionTimeout」デフォルト設定と一致します。 .
だから...私が間違っていない限り、このconnectionTimeout値を15秒に変更するだけで十分です。これを行うには、ここで説明されているように、ApplicationHost.config ファイル (XDT) に変換ベースのアプローチを使用する必要があることを理解しています。
次のapplicationHost.xdtファイルでこれを行いました...
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.applicationHost>
<webLimits xdt:Transform="SetAttributes(connectionTimeout)" connectionTimeout="00:00:15"/>
</system.applicationHost>
</configuration>
...その後、適切な場所 (d:/home/site/applicationHost.xdt) にファイルを追加しました。サイトを再起動したところ、変換が正常に適用されたことをログで確認できました。
2016-04-20T08:40:44 Start 'site' site extension transform
2016-04-20T08:40:44 StartSection Executing SetAttributes (transform line 4, 18)
2016-04-20T08:40:44 on /configuration/system.applicationHost/webLimits
2016-04-20T08:40:44 Applying to 'webLimits' element (no source line info)
2016-04-20T08:40:44 Set 'connectionTimeout' attribute
2016-04-20T08:40:44 Set 1 attributes
2016-04-20T08:40:44 EndSection Done executing SetAttributes
2016-04-20T08:40:44 Successful 'D:\home\site\applicationHost.xdt' site extension transform
2016-04-20T08:40:44 sandboxproc.exe complete successfully. Ellapsed = 316.00 ms
[編集]: 変換の直後に applicationhost.config も確認しましたが、新しい値がそこにあります。
...
</sites>
<webLimits connectionTimeout="00:00:15" />
</system.applicationHost>
<system.webServer>
<asp>
...
これにもかかわらず、上記のアクション メソッドをもう一度実行すると、15 秒ではなく 2 分後にタイムアウトします。
私の質問:このタイムアウト設定が尊重されていない理由を誰か知っていますか?
私はこの投稿を知っていますが、これはまったく同じアプローチを取っているようです (そしてうまくいったように見えますか?)。