サードパーティのホスティング環境でホストされているWebアプリケーションがあります。サーバーアプリケーションは、一部のWCFRESTFULサービスをiPadアプリケーションに公開します。
WCFサービスは.svc-lessであり、Glonbal.asaxファイルに登録されています。サンプル:
RouteTable.Routes.Add("service name", new ServiceRoute("url",
new WebServiceHostFactory(), routingServiceContract));
iPadアプリからサーバーアプリケーションに大量のデータを転送する必要があるため、一部のリクエストはWCFサービスに送信される前にGZIP圧縮されます。また、サーバーアプリは最初は.NET 3.5に基づいて構築されていたため、次のようなコードが圧縮された要求の解凍を担当していました。
public void Application_BeginRequest(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.Headers["Content-Encoding"]))
{
if (Request.Headers["Content-Encoding"].ToLower().Contains("gzip"))
Request.Filter = new GZipStream(Request.Filter, CompressionMode.Decompress);
if (Request.Headers["Content-Encoding"].ToLower().Contains("deflate"))
Request.Filter = new DeflateStream(Request.Filter, CompressionMode.Decompress);
}
}
これは、ホスティングプロバイダーがサーバーに.NET4.5をインストールするまで機能していました。次に、圧縮されたJSONリクエストが失敗し始めました(http 400または場合によっては500エラーが発生します)。多くの調査の結果、WCFサービスは.NET 4.5がインストールされていないサーバーで完全に機能するため、コードとweb.configファイルはすべて問題ないことが判明しました。
上記のコードにコメントを付けて同じサーバーに公開しましたが、再び機能しませんでした。リクエストが2回デコードされていると思っていました!。
WCF 4.5の組み込みの圧縮機能を利用して、このWebサイトを機能させるにはどうすればよいでしょうか。私はカスタムc#コードを取り除き、WCF4.5圧縮機能を使用することを好みます。
psWebサービスはASP.NET互換モードで実行されています。
pps httpリクエストを圧縮しない場合、Webサービスは完全に機能します。