1

SilverlightからWCFWebサービスを呼び出すのが非常に遅いという問題があります。状況は、 http://forums.silverlight.net/t/148027.aspx/1で概説されている状況と非常によく似ています。そのポスターのように、私は単純なSilverlightアプリケーションプロジェクトと単純なコンソールアプリケーションプロジェクトを設定しました。それぞれに、WCFサービスへのサービス参照を追加し、サービスにいくつかのテスト呼び出しを追加しました。ただし、各通話が発信されるまでにかかる時間は大幅に異なります。コンソールアプリは、ミリ秒のオーダーで呼び出しを行います。Silverlightアプリを使用すると、3〜5秒で完了します。

上記にリンクした投稿で、投稿者がバイナリメッセージエンコーディングを使用するようにサービスを変更すると、速度のギャップがなくなりました。ただし、私の状況では、バイナリメッセージエンコーディングとテキストメッセージエンコーディングのどちらを使用しているかに関係なく、大きな速度ギャップが残ります。

この速度の違いの原因は何でしょうか?バイナリエンドポイントを使用するように構成した場合、リクエストとレスポンスの両方がバイナリエンコードされていることをフィドラーで確認しました。また、複数の連続するWebサービス呼び出しを通じて低速が続くことを確認したため、単なるスピンアップ時間ではありません。問題は、Silverlight側のどこかにある必要があります。

これは、時間差を測定するために使用しているコードのスニペットです。

    var proxy = new WCFRef.WebServicesClient("binary");
    var callbegin = DateTime.Now;
    proxy.CallWSMethodAsync();
    var callend = DateTime.Now;
    var span = callend.Subtract(callbegin);
    Debug.WriteLine("call time: " + span.Seconds + "." + span.Milliseconds + " sec");

そのコードでキャプチャされたタイムスパンは、私が話していたスパンであり、コンソール(数ミリ秒)とSL(数秒)の間に大きな違いがあります。

4

1 に答える 1

0

数か月前、WCFからこのスピードバンプも発生しました。なぜ遅いのかわかりません。私は、SOAPは一般的に少し遅い(多くのオーバーヘッド)だけでなく、それほどパフォーマンスが良くないシリアライザーだと思います。

最近、RESTアーキテクチャに切り替えました(サービススタックですが、Web API / asp.net mvcも正常に機能します。サービススタックがもう少し気に入っただけです)。パフォーマンスは2倍から15倍の速度に向上しました。WCFは、要求の受け入れとシリアル化/逆シリアル化が非常に遅いです。

.netが削除されたSilverlightは、それと関係があると思います。

また、純粋なシリアライザーを使用していくつかのテストを行いました。wcfが使用するxml/binaryシリアライザーをcostumJSONシリアライザーに切り替えることで大きな後押しが得られました。残念ながら、WCFのシリアライザーをSilverlightに切り替えるのは簡単ではありません。

于 2013-03-19T17:52:02.767 に答える