2

WCF Web サービスを介して IIS 7.0 サーバーからデータを取得する Silverlight プロジェクトがあります。通常、返されるデータは大きいため、圧縮は適切なオプションのように思われました。しかし、私の人生では、それを機能させることはできません。

これが私がこれまでに試したことです

  • すべての MIME タイプ ( / )に対して圧縮 (動的および静的) を有効にしました。動作することを確認しました (aspx ページでヒットすると、フィドラーに従って gzip されたデータが返されます)
  • WCF と圧縮についていろいろ調べました。gzipを有効/無効にするものがあるWCF 4.5の行に沿って何かを読みました。これが IIS 7.0 の動的圧縮を使用できないことを意味するのか、それとも関係のないことなのかはわかりません。
  • また、GZipEncoder の使用に関するいくつかの例も入手しました (Microsoft WCF サンプルから)。

そして、ここで私が知りたいのは

  • .NET 4.0 を使用する IIS 7.0 サーバーでホストされている WCF から Silverlight がデータを読み取る場合、Web.Config / applicationHost.Config をいじるだけで XML 応答の圧縮をオンにすることはできますか?
  • そうでない場合、それを機能させる最も簡単な方法は何ですか (たとえば、dll を追加し、Web.Config を変更して完了です!)

ありがとう!

編集:すべての回答に感謝します。簡単なメモ-WCF 4.0で機能しないことを誰かが確認できれば、これを行う場合にのみWCF 4.0で機能します。

4

2 に答える 2

1

WCF で GZip 圧縮が機能するようになりました。これを機能させるために行ったことを振り返ってみます。これを機能させようとすると、いくつかの落とし穴があります (個人的には、可能な限り WCF から離れようとしています)。

まず、IIS 動的圧縮をインストールする必要があります。次に、組み込みの http スタックは GZip 圧縮をサポートしていないため、Silverlight アプリではブラウザー http を使用する必要があります (これはブラウザーの既定ですが、OOB を実行するときはそうではありません)。これは Application_Startup() 関数で強制できます (必要に応じて http を https に変更します)。

WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.BrowserHttp);

ここで問題になるのは、ブラウザー スタックが http 500 応答のコンテンツを Silverlight に渡さないため、Web サービスの呼び出しが失敗した場合にのみ、クライアントで一般的なエラーが発生するということです。これはあなたにとって問題ですか?応答コードを常に 200 に変更するカスタム MessageInspector で回避できます。

web.config で、動的圧縮を有効にする必要があります

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />

その上、MIME タイプを IIS に登録する必要があります。バイナリ メッセージ エンコーディングを使用して WCF の applicationHost.config にこれを追加しました。

<add mimeType="application/soap+msbin1" enabled="true" />

バイナリ メッセージ エンコーディングを使用していない場合は、代わりにここで application/soap+xml が必要になる可能性があります。私の記憶が正しければ、必要な手順はこれだけです。

最後の落とし穴ですが、Silverlight が実際に gzip 圧縮されたリクエストをサーバーに送信する方法 (afaik) がないため、クライアントが大きなメッセージを送信している場合は役に立ちません。そのため、唯一の利益はサーバーによって送信されるデータになります。 .

于 2013-10-15T14:08:58.987 に答える
0

WCF over HTTP による圧縮には、いくつかのオプションがあります。それぞれに長所と短所があります。

IIS 動的圧縮

これは HTTP レイヤーでの圧縮であり、最も低いレベルで実行されるため、最もパフォーマンスが高くなります。また、最も標準的であるため、他の Web テクノロジと簡単に連携できます。

残念ながら、主な欠点は、アップストリーム データは制限されており、ダウンストリーム ペイロードのみが圧縮する価値があるという古い信念があった古い Web テクノロジ (HTTP) に基づいていたことです。したがって、アップストリーム データは圧縮されません。

メッセージ圧縮

.net 4.5 以降、メッセージ エンコーダーには新しいプロパティ on があり、MessageEncoder圧縮を有効にできます。これは .net 層で行われるため、IIS 圧縮よりもはるかに低速です。また、独自のものであるため、ドットネット以外のテクノロジでは使用が難しい場合があります。この技術は、SilverLight では利用できません。

于 2013-10-12T13:35:48.267 に答える