0

我使用 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 及更高版本使用的新的简化绑定方法有关。

4

0 回答 0