2016-03-21 22 views
0

私が開発するWebサービスは、最大6秒で応答する必要があります。 Webサービスが6秒以内に応答できない場合は、ハードコーディングされたデータで応答する必要があります。IIS/Azure IIS - 最大応答時間を制限する

ウェブサービスは、着信データを変換して別のサービスにリクエストするプロキシのようなものです。そのサービスは第三者であり、失敗するか、あまりにも長く応答する可能性があります。

現在、サードパーティのサービスに対するタイムアウトを3秒に制限するアプリケーションコードには制限があります(覚えておいて、合計応答時間は最大6秒です)。

しかし、アプリケーションの負荷が非常に高く、3秒間でコードを実行できないことがあります(アプリケーションコードをロードせずにミリ秒単位で実行するとコードが少しあります)。 私はWindowsがすべてのスレッドを実行することができず、スレッドが3秒以上スリープすることがあり、最大応答時間に違反する可能性がないと考えています。

アプリケーションはasp.netコアでC#で開発され、完全に非同期です。

質問:IISレベルでの応答時間を制限できますか?タイムアウトが発生した場合、事前定義されたデータで応答することは可能ですか?応答性を向上させるためにAzureに余分なインスタンスを追加する以外は方法がありますか?堅牢なタイムアウトを処理するためのプログラム的な方法はありますか?

EDIT

私は高負荷でIIS上の応答時間を保証

  1. を必要としています。非リアルタイムOSでの使用は可能ですか?
  2. 要求が時間内に処理されない場合、定義済みのハードコードされた応答を送信します。
  3. 構成自体についてのAzure
+1

あなたのAzureインスタンスで利用可能なリソースを増やしたり、ロードバランシングでインスタンスを追加する必要があるようです。また、アプリケーションコードのパフォーマンスのボトルネックも探して解決することをお勧めします。 – user1666620

答えて

0

でこれを行い、あなたは、単純なエスケープとして使用することができた分に制限している、しかし、あなたがこれを実行することはできませんので、私は、私が使用すると思いますあなたはeasillyも非同期/のawaitを使用して、いくつかの種類のタイマーでこのクラスを実装することができ

public class TimeRestrictor{ 
    public bool InvokeAction(Action action, TimeSpan timeout){ 

    } 

    public Tuple<bool, T> InvokeFunction<T>(Func<T> function, TimeSpan timeout){ 

    } 
} 

:エンタープライズライブラリの再試行ロジックに似た何かが、つまり、メソッドおよびタイムアウト値をとる小さなクラスを作ります(私はそれらを単純化のために出した)

それは、その後、このメソッドを呼び出すの問題のようになります。これは、私はちょうど私の頭の上から、このコードを書いて、いくつかの調整が必要ですが、あなたに私の提案の一般的なアイデアを提供します

var ranInTime = timeRestrictor.InvokeAction(MyMethod, TimeSpan.FromSeconds(6)); 
if(!ranInTime){ 
    SetTimeOutResult(); 
}