WCF データ サービスがあり、IIS 圧縮のサポートを有効にしようとしています。これまでのところ、私が得た最高のものは、次のことを試したときです。
static ServiceReference1.myTestEntities GetEntities()
{
var content = new ServiceReference1.myTestEntities(new Uri(SERVICE_URL);
content.IgnoreMissingProperties = true;
content.SendingRequest += new EventHandler<System.Data.Services.Client.SendingRequestEventArgs>(content_SendingRequest);
content.Credentials = System.Net.CredentialCache.DefaultCredentials;
return content;
}
static void content_SendingRequest(object sender, System.Data.Services.Client.SendingRequestEventArgs e)
{
foreach (var key in e.RequestHeaders.AllKeys)
{
if (string.Equals(key, "Accept-Encoding", StringComparison.InvariantCultureIgnoreCase))
{
return;
}
}
e.RequestHeaders.Add("Accept-Encoding", "gzip,deflate,sdch");
}
問題は、accept-encoding ヘッダーを追加している間、クライアントが応答を解凍しないため、「16 進値 0x1F は無効な文字です。行 1、位置 1」などのエラーが表示されることです。これは基本的に、クライアントが返されたストリームを解凍していないことを意味します。
私の ServiceReference1 は、Visual Studio 2010 で「サービス参照の追加」を使用するだけで作成されました。ブラウザーを使用して同じ要求 URL にアクセスし、Wireshark でチェックすることで、サーバー上で圧縮が機能しています。
私が見つけることができるクライアントプロキシには設定がないようです。このことから、私の質問は、クライアント プロキシに対して WCF Data Service Compression を有効にするにはどうすればよいかということです。
編集:理想的には、このようなもの(Windows Phone 7.5用)を探していますが、通常のデスクトップアプリケーション用に欲しいです。