Sea*_*man 3 c# ajax wcf json webhttpbinding
我有一个基于AJAX的WebGet方法返回JSON.它不适用于几千行的JSON结果(如果我只使用100行左右).我注意到浏览器只是暂停而没有任何反应,没有任何显示Firebug控制台的信息:
[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; }
}
Run Code Online (Sandbox Code Playgroud)
这是WCF的服务器端配置:
<service name="Test.AJAXService" behaviorConfiguration="metadataBehavior">
<endpoint address="" behaviorConfiguration="Test.AJAXServiceAspNetAjaxBehavior"
bindingConfiguration="webHttpConfig"
binding="webHttpBinding" contract="Test.IAJAXServiceTest" />
</service>
Run Code Online (Sandbox Code Playgroud)
这是我正在申请的webHttpBinding配置:
<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>
Run Code Online (Sandbox Code Playgroud)
以下是终点行为:
<behavior name="Test.AJAXServiceAspNetAjaxBehavior">
<enableWebScript />
<webHttp defaultOutgoingResponseFormat="Json" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
Run Code Online (Sandbox Code Playgroud)
在我看来,一切都是最大的,它应该有效,我可能会缺少什么?
我通过更改metadataBehavior配置上的dataContractSerializer属性解决了这个问题,因为AJAXServiceAspNetAjaxBehavior不够用.它从服务级别获取我的maxItemsInObjectGraph属性,而不是端点级别:
<service name="Test.AJAXService" behaviorConfiguration="metadataBehavior">
<endpoint address="" behaviorConfiguration="Test.AJAXServiceAspNetAjaxBehavior"
bindingConfiguration="webHttpConfig"
binding="webHttpBinding"
contract="Test.IAJAXServiceTest" />
</service>
Run Code Online (Sandbox Code Playgroud)
在metadataBehavior中:
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
Run Code Online (Sandbox Code Playgroud)