2017-04-19 20 views
0

私は大規模なアプリケーション全体のモジュールであるASP.NET MVC Webアプリケーション(C#)を扱っています(主にデスクトップ/ Winサービスベース - VB.NET)。現在のところ、アプリケーションは独自のアプリケーション(MVC、VB.NETを使用している)であるWebサービス(APIとして提供)へのHTTP呼び出しを行います。おそらく私はそれをどのように設計するのだろうか、それは私が継承したものです。MVC WebアプリケーションとAPI Webアプリケーションを同じプールで実行できますか?

私の問題は次のとおりです。ローカルIISでMVCアプリケーションをホストし、IIS ExpressでAPIプロジェクトを実行すると、すべて正常です。 2つのプロジェクトを分割して、ローカルIISの別々のアプリケーションプールで実行すると、すべてがうまくいきます。しかし、IISで同じプールから両方のアプリケーションを実行すると、多くの問題が発生します。つまり、私がに電話をかけたときのタイムアウトHttpClient.GetAsync(url) - 特にこのページを9回呼び出して、IDに基づいてさまざまなイメージを動的に取得するページ(各呼び出しはMVCアプリケーションに呼び出され、 API)。一部の通話は通話を行い、ほとんどの通話は通話しません。

キャンセルされたタスク(タイムアウト= 100s)に関する例外ですが、アクションには数分の1秒が必要なためタイムアウトする必要はありません。実行は、HTTPクライアントがこれ以上接続を提供しなくなった場合や、HTTPが要求を送信するのを待っている場合など、失敗した場合にAPI側の関数に実行されることはありません。

私はそれを非同期化しようとしていますが、HttpClientを静的にしようとしましたが、喜びはありませんでした。これは単純に行われてはならないことですか?2つのアプリケーションがアプリケーションプールを共有できるようにしますか?もしそうなら、私はそれで生きることができます。しかし、より効率的に処理できることがあれば、それは非常に便利です。これに関する情報やリソースは非常に高く評価されます。 Ta!

答えて

0

私たちは最近、同じ問題に遭遇しました。同じアプリケーションプールを使用することが問題の原因であることを明らかにするにはかなりのデバッグが必要でした。

また、アプリケーションプールの詳細設定で最大ワーカープロセスの数を増やすと、これが機能することがわかりました。

私はこの理由はわかりませんが、すべてのリクエストが1つのプロセスで処理されていると推測していますが、これはバックログの原因となり、最終的にタイムアウトが発生します。ガベージコレクタを非難することができているかのように、ここでさらに読書Carmelo Pulvirenti's Blogにそれはそう:

HTH

編集(IISでより知識がある誰かがが私を修正するために私が幸せになると思います)。ブログでは、同じプール上で実行されている複数のアプリケーションがメモリを共有していると述べています。

つまり、 のメモリをアプリケーションに提供するために、GCが1秒あたり多くの時間を実行します。副作用は何ですか?サーバーモードでは、 ガベージコレクタはメモリを でクリーンアップするためにすべてのスレッドアクティビティを停止する必要があります(.NET Fx 4.5では改善されました。照合では はすべてのスレッドを停止する必要はありません)。副作用は何ですか? GCの活動に起因するCPU時間にWebアプリケーション

  • ハイインパクトの

    1. パフォーマンスが低下します。
  • 関連する問題