4

サードパーティのホスティング環境でホストされている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サービスは完全に機能します。

4

1 に答える 1

0

構成ファイルとApplication_BeginRequestメソッドを確認しました。.net 4.0を使用して自分のマシンに構成ファイルを複製し、正常に機能することを確認しました。また、.net4.5を搭載したマシンでも同じ設定が失敗することがわかりました。私の観察によると、あなたの問題は、Application_BeginRequestにある圧縮/解凍コードとは関係ありません。しかし、あなたは私がこの[投稿][1]で説明したのと同じ問題に直面しています。

[1]:WCF-.Net4.5のインストール「投稿」後にエンドポイントが競合しています。この投稿では、この問題の回避策も投稿しました。回避策は、RESTエンドポイントを明示的に定義することです。同じ回避策に従うと、あなたのプロジェクトが機能し始めたことがわかりました。プロジェクトを機能させるために私がしなければならなかったのは、これら2行を構成に追加し、サービスエンドポイントを明示的に構成することだけです。

    <services>
      <service name="<YourNamespace>.TestService">
        <endpoint address="" binding="webHttpBinding" contract="<YourNamespace>.TestService" behaviorConfiguration="RESTEndpointBehavior"/>
      </service>
    </services>

これで問題が解決するかどうかを確認できますか?

于 2012-12-04T21:16:04.667 に答える