2011-07-13 13 views
3

JSONを返すAJAXベースのWebGetメソッドがあります。数千行のJSON結果では機能しません(100行程度であれば動作します)。AJAXサービスから大きなJSONファイルを返す - WCF

[WebGet] 
    public HttpTransactionTransformArgs Test() 
    { 
     HttpTransactionFilterArgs args = new HttpTransactionFilterArgs(); 

     args.Context = "MyDb"; 
     args.Entity = "MyDbRow"; 
     args.Key = "1"; 
     args.Option = null; 

     HttpTransactionTransformArgs targs = new HttpDataPush().TransformRequest(args); 

     return targs; 
    } 

[DataContract] 
[KnownType(typeof(HttpTransactionTransformArgs))] 
[KnownType(typeof(HttpColumnDefinition))] 
[KnownType(typeof(HttpDataRow))] 
public class HttpTransactionTransformArgs 
{ 
    [DataMember]  
    public string EntityName { get; set; } 

    [DataMember] 
    public List<HttpColumnDefinition> Schema { get; set; } 

    [DataMember] 
    public List<HttpDataRow> Data { get; set; } 

    [DataMember] 
    public bool TransactionSuccessful { get; set; } 
} 

そしてここでは、私のサーバー側の設定は、WCFのためにある:

<service name="Test.AJAXService" behaviorConfiguration="metadataBehavior"> 
    <endpoint address="" behaviorConfiguration="Test.AJAXServiceAspNetAjaxBehavior" 
       bindingConfiguration="webHttpConfig" 
       binding="webHttpBinding" contract="Test.IAJAXServiceTest" /> 
    </service> 

これはwebHttpBindingの設定である私は、私はFirebugのコンソールを示す任意の情報なしに、ブラウザだけで失速し、何も起こらないことに注意してください適用しています:

 <webHttpBinding> 
    <binding name="webHttpConfig" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" 
       closeTimeout="00:30:00" openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" > 
     <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" 
        maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </webHttpBinding> 

そして、ここではendpoingの動作です:

<behavior name="Test.AJAXServiceAspNetAjaxBehavior"> 
     <enableWebScript /> 
     <webHttp defaultOutgoingResponseFormat="Json" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    </behavior> 

すべてが尽きていて、うまくいくように見えますが、何が欠けていますか?

+0

をあなたはそれが何も異常を示しているかどうか確認するためにサービスのトレースをオンにしようとしたことがありますか? –

+0

はい、エラーは表示されません。 WCFとその謎めいた、あるいは存在しないエラーメッセージに本当に迷惑をかけるようになった... –

答えて

5

私は、AJAXServiceAspNetAjaxBehaviorで十分ではなかったため、metadataBehavior設定のdataContractSerializer属性を変更することでこれを解決しました。これは、サービスレベルではなく、endointレベルから私のmaxItemsInObjectGraph属性を取っていた。metadataBehaviorで

<service name="Test.AJAXService" behaviorConfiguration="metadataBehavior"> 
    <endpoint address="" behaviorConfiguration="Test.AJAXServiceAspNetAjaxBehavior"    
     bindingConfiguration="webHttpConfig"    
     binding="webHttpBinding" 
     contract="Test.IAJAXServiceTest" /> 
</service> 

を:

<behavior name="metadataBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
    </behavior> 
関連する問題