7

WCFサービス参照を使用して既存のASMXWebサービスにバインドしています。500kの長さの文字列を含むDataSetオブジェクトを返すメソッドがあります。

標準の「昔ながらの」Webリファレンスとして、このメソッドの呼び出しは完了するのに約2〜3秒かかります。WCFサービス参照として、これは完了するのに20秒以上かかります。これは今私たちのシステムに影響を与えています:(

すべてのmaxReceivedMessageSizeやmaxBytesPerReadなどを最大化するようにバインディングを変更しようとしましたが、違いはありません。

WCF参照が非常に遅いのはなぜですか?これを修正するにはどうすればよいですか?

4

3 に答える 3

2

ここにはいくつかの問題があるようです。

  1. まず、WCF サービスは、特に構成されていない限りステートフルであるため、新しい接続ごとにアクティブ化する必要があります。このアクティブ化は、認証のために往復する追加のトリップにより、SSL によって遅くなります。上記の質問/提案の 1 つとして、最初の接続を確立してから、メソッドを 10 回ほど実行し、後続の呼び出しにかかる時間を測定してみてください。最初の呼び出し後ははるかに高速になるはずです。実際、MS によると、WCF は「古い学校」の ASMX よりも効率的に呼び出しを処理できますが、それでもアクティベーション時間の影響を受けます。

  2. 次に、WCF はバックグラウンドでクレイジーなシリアル化アクションを実行しており、DataSet オブジェクトのオーバーヘッドとメタデータが非常に多いため、DataSet オブジェクトをうまく処理できません。より大きなデータセットを使用する必要がある場合は、ストリームのシリアル化を MTOM またはバイナリに変更する必要があります (ただし、クライアントが WCF/.NET ベースの場合にのみ機能します)。もう 1 つのオプションは、DataSet を使用しないことです。これは、WCF に関してはおそらく最良のオプションです。 これは、データセットのシリアル化の速度に関する興味深い記事へのリンクです。

DataSet を使用しない理由に関する追加の記事。

参照:

http://msdn.microsoft.com/en-us/library/bb310550.aspx

http://blogs.microsoft.co.il/blogs/oshvartz/archive/2011/07/23/wcf-performance-using-datasets-part-2.aspx

http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx

于 2012-08-01T02:50:10.437 に答える
0

多くの側面を調べる必要があります。特に、データ量の点で同様に比較していることは重要です。速度低下の原因となっている他の要因がある可能性があります。

私の最初の質問は、なぜ WCF に変更したのですか? これには特定の理由がありましたか - それが正しい方法であることはわかっていますが、これを今変更する必要があることを意味する特定の理由はありますか? インターフェイスに変更があった場合、広範囲にわたる影響があった可能性があります。

オブジェクト処理のため、WCF は若干遅くなる傾向がありますが、このような違いはないはずです。これはすべて、環境内の他の何かが本当の問題であることを示しています。

于 2011-06-23T10:25:25.543 に答える
0

どのタイプのバインディングが使用されていますか? BasicHttpBinding と WSHttpBinding があり、asmx をシミュレートするには BasicHttpBinding が推奨されます。一般に、WCF は、少なくとも対応する asmx と同等である必要があります。それでも問題が解決しない場合は、WCF の同時実行設定とインスタンス化モードを微調整してみてください。

于 2011-09-10T04:19:30.913 に答える