我使用 JQuery .AJAX 调用我的 WCF Web 服务并传递要处理的项目集合。大多数情况下它工作正常,但是当我在 POST 时集合中有大量项目时,我会立即收到错误 400。
这是jQuery代码:
// Get the selected items
var oAssayOrderListSelected = jQuery.grep(oAssayOrderList, function (element, index) {
return element.SelectedForProcessing == true;
});
DataAsJson = { "SelectedItems": oAssayOrderListSelected };
var DataAsJsonString = JSON.stringify(DataAsJson);
// Call the web service to Process the Assays
$.ajax({
cache: false,
url: "AssayControlWS.svc/ProcessOrdersForAssays",
type: "POST",
async: true,
dataType: "json",
data: DataAsJsonString,
contentType: "application/json; charset=utf-8",
success: function (processingResults) {
// Update the results table with the result information
if (processingResults.Status == "Success") {
}
else {
// insert error message handler!!!!!
}
},
这是被调用的 Web 服务方法的声明:
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public ReleaseResult ProcessOrdersForAssays(List<AssayGroupOrOrderSummary> SelectedItems)
{ ... }
这是服务的 web.config 条目。正如它所显示的,我已经从默认值中大大增加了缓冲区大小
<service name="AssayControl_Web.AssayControlWS" behaviorConfiguration="metadataAndDebug">
<endpoint address="" behaviorConfiguration="AssayControl_Web.AssayControlWSAspNetAjaxBehavior"
binding="webHttpBinding" contract="AssayControl_Web.AssayControlWS" bindingName="AssayControl_Web.AssayControlWS" />
</service>
<behaviors>
<endpointBehaviors>
<serviceBehaviors>
<behavior name="metadataAndDebug">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</endpointBehaviors>
</behaviors>
<webHttpBinding>
<binding name="AssayControl_Web.AssayControlWS" maxBufferSize="200000000"
maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000"
transferMode="Buffered" />
</webHttpBinding>
关于导致此 400 错误的原因有什么想法吗?
=================== 问题解决了============================= ==
添加 WCF 日志记录后,我可以看到问题在于 Web 服务使用默认值 65536 作为 maxReceivedMessageSize。尽管我将此值设置为更高的值。
另外搜索显示其他几个人遇到了 maxReceivedMessageSize 被忽略的问题。我解决问题的方法是从 webHttpBinding 中删除 Name 属性,使该设置成为所有 webHttpBinding 的默认设置。然后从服务端点中删除 BindingName 属性,使其使用默认绑定。
这是具有相同修复程序的其他报告的链接,http://social.msdn.microsoft.com/Forums/vstudio/en-US/985e039f-1610-4f62-9c3d-51ec7e1b1673/problem-with-maxreceivedmessagesize -webconfig-忽略。也许这与 .net 4.0 及更高版本使用的新的简化绑定方法有关。