Azureのインスタンスで実行されているBasicHttpBindingを使用する2つのエンドポイントを持つWCFサービスがあります。サービスが初めて呼び出されたとき、応答には13〜16秒かかり(予想される)、その後の要求は、要求の種類に応じて150ミリ秒から1000ミリ秒の間で適切です(テストにはsoapUIを使用しています)。
しかし、数分間(4分または5分未満)リクエストを送信しない場合、サービスインスタンスは、最初のリクエストである13秒以上かかるため、再利用されていないように見えます。
ServiceBehaviorで「InstanceContextMode=InstanceContextMode.Single」を試しましたが、問題は解決しませんでした。
トレースでは、サービスが遅い応答を返すたびにスレッドIDが変化することがわかります。
また、Application_BeginRequestがヒットしてから、クライアントによって呼び出されているメソッドが開始されるまでの時間を記録しました。これは、これらの「遅い」呼び出し中の最大の遅延のようです。ビジネスインターフェイスを表すかなり大きなクラスがいくつかあり、AzureVMで実行されているMySQLデータベースにEntityFrameworkを使用しています。(これは必ずしもAzureの問題ではないと思いますが)。
遅い応答は、DB操作にリンクされた複雑なメッセージタイプを呼び出している場合でも、単純な「HelloWorld」応答を呼び出している場合でも同じです。
サービスの新しいインスタンスが必要な場合でも、IISの再起動またはアプリケーションプールのリサイクル後の初期ロードと同じくらいの時間がかかりますか?
静的クラスのラッパーを使用して魔法をかけることは役に立ちますか?(私は考えていません)。
C#4.0 /VS2010Professionalで構築