0

私のアプリケーションが私のサービスの応答を消費している Windows Phone 7 アプリを開発しています。

私のサービスは xml(string) の応答を返しています.xmlのサイズが非常に大きいため、次を使用してxmlを圧縮しました:-

    public static string Compress(string text)
    {
        byte[] buffer = Encoding.UTF8.GetBytes(text);
        MemoryStream ms = new MemoryStream();
        using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
        {
            zip.Write(buffer, 0, buffer.Length);
        }

        ms.Position = 0;
        MemoryStream outStream = new MemoryStream();

        byte[] compressed = new byte[ms.Length];
        ms.Read(compressed, 0, compressed.Length);

        byte[] gzBuffer = new byte[compressed.Length + 4];
        System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
        System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
        return Convert.ToBase64String(gzBuffer);
    }                                                                                            

GZipStream クラスを使用してデータを圧縮し、System.IO.Compression を使用して名前空間を追加しましたが、

私の問題はそれです:-

そのクライアント側(Windows Phone 7アプリ)で解凍できません。そのDLLをWindows Phone 7アプリプロジェクトに追加しようとしました

それは言う:- system.Io.Compression dll は、Windows Phone 7 ランタイムを使用してビルドされていないため、追加できません。Windows Phone プロジェクトは、Windows Phone アセンブリでのみ動作します。

私は何か間違ったことをしていますか、何か良い方法はありますか。

最適解を教えていただけないでしょうか?

前もって感謝します

4

1 に答える 1

0

Windows Phone はデスクトップ .NET ライブラリを参照できませんが、Windows Phone に相当するものはありません。

zip リクエストを簡素化するサードパーティ ライブラリがあります。

  • Delay.GzipWebClientへのパッケージ (NuGet) 参照を追加します。
  • 次のコードをスタートアップに追加します。

_

WebRequest.RegisterPrefix("http://", SharpGIS.WebRequestCreator.GZip);
WebRequest.RegisterPrefix("https://", SharpGIS.WebRequestCreator.GZip);

その時点から、Web リクエストは自動的に圧縮されたレスポンスをリクエストし、アプリケーション コードがそれらを取得するまでに解凍されます。

于 2012-05-02T10:34:15.440 に答える