ASP.NET WebServiceを介してファイルを転送するのは超スローです
-
15-10-2019 - |
質問
メソッドを定義するレガシーWSE3 ASP.NET Webサービスがあります GetFileContent(string fileName)
. 。それが行うことは、渡された名前のファイルの事前定義されたパスをチェックし、そのコンテンツを読み、それをbase64-Encodeで、エンコードされたものを応答として送り返します。
残念ながら、プロセス全体に(さまざまな)年齢が必要です。パフォーマンスをオンデマンドでベンチマークするコンソールクライアントアプリを作成しました。12秒以内に2.5MEGが転送される場合があり、時には40秒かかることもあります。昨日16秒で別の27MEGファイルが走り、今日は1分以上かかりました。
私がチェックしたさらなること:
CPUとスワップのパフォーマンスは言及する価値がありません(監視では、マシンは退屈に見えます)
ネットワーク速度で十分です。
メソッド呼び出しは、クライアントがリクエストを送信した直後に実行されます。
読み取りとエンコードには、大きなファイルに平均500ミリ秒かかります。そのため、リクエストの直後に戻りステートメントも実行されます。
別のクライアント(Javaベース)はさらに遅いので、私はそれを推測します たぶん......だろう クライアントの問題になります。
誰かがこの厄介なものの後ろに行くために隣をどこを見るべきかを考えていますか?私はトラブルのように感じます、本当に...
よろしくお願いします...
解決
まず、確認するために:WSEが時代遅れであることを知っていることを願っています。
第二に、WSEはASMXテクノロジーに基づいています。これには、サービスに向かう途中で4回以上、着信データが重複するため、大規模なリクエストに問題があります。データが大きくても、サービスが手に入れる前に少なくとも4倍のメモリが必要だと仮定します。
回避策は、WCFにアップグレードすることです。
他のヒント
IISには問題はないと思います。共有パスが実際のパスが与えられた場合、IPを解決するのにもっと時間がかかったと思われます。