2016-11-02 8 views
1

gzipを使用してレスポンスがエンコードされているリモートトリプルストアからのデータを要求および受信するようにdotNetRDFに指示する方法を教えてください。dotNetRDFでgzipコンテンツエンコーディングを受信

SparqlHttpProtocolConnectorのLoadGraphメソッドのソースコードを見ると、Accept-Encodingヘッダーを設定するメカニズムやContent-Encodingヘッダーを処理するロジックが表示されません。

同意-エンコーディングを設定するLoadGraphを修正し試みたが、内容は右のContent-TypeとContent-エンコーディングで戻ってくるが、応答を処理する方法を決定するコードの行が

IRdfReader parser = MimeTypesHelper.GetParser(response.ContentType); 
です

とGetParserには、コンテンツエンコーディングを考慮するロジックがありません。

しかし、断片が存在するようです:gzippedファイルを処理するためのインフラストラクチャがあります。

これを行う別の方法がありませんか、これは新しい機能要求ですか?

ありがとうございました。

答えて

2

SPARQLHttpProtocolConnectorを拡張し、ApplyCustomRequestOptionsメソッドをオーバーライドしてAccept-Encodingヘッダーを適用できます。

は応答のContent-Encodingヘッダーを区別しませんが、代わりにHttpWebRequest.AutomaticDecompression Propertyを使用して応答ストリームの自動解凍を有効にすることができます。ここでも、これはApplyCustomRequestOptionsメソッドで設定できます。応答のための

public class CompressedSparqlHttpProtocolConnector : SparqlHttpProtocolConnector 
{ 
    // Define appropriate constructors with the parameters you need e.g. 
    public CompressedSparqlHttpProtocolConnector(Uri serviceUri) 
: base(serviceUri) { }  

    protected override ApplyCustomRequestOptions(HttpWebRequest request) 
    { 
    // Request GZip encoded response, allow fallback to identity encoding 
    request.Headers[HttpRequestHeader.ContentEncoding] = "gzip;q=1.0, identity;q=0.5" 

    // Enable automatic decompression of the response 
    request.AutomaticDecompression = DecompressionMethods.GZip; 
    } 
} 
+0

ありがとう:

だからあなたの拡張クラスは、このようなものになるだろう。しかし、ApplyCustomRequestOptionsは、SparqlHttpProtocolConnectorの基本クラスの1つではない抽象クラスBaseEndpointで定義されています。 (SparqlHttpProtocolConnectorはBaseRequestOptionsを含むBaseHttpConnectorから派生しますが、そのメソッドはオーバーライドできません) – MWood

+0

また、HttpRequestHeader.AcceptEncodingを意味しましたか? 回避策として、派生クラスを作成しましたが、上記の機能を追加してSparqlHttpProtocolConnectorからLoadGraphの機能全体を取り上げました。 私は正しい方向に向いてくれてありがとう。 – MWood

関連する問題