将文件达到特定大小时将multipart formdata发布到WCF服务时出错400

时间:2014-10-14 18:50:11

标签: asp.net ajax sharepoint file-upload multipartform-data

问题:

我正在尝试使用jQuery ajax和javascript FormData对象将文件上传到Web服务。它适用于大小约为60KB的文件。但是,对于大约70KB以上的文件,我从服务器收到“400错误请求”响应。我在某处丢失了某些东西,但似乎无法找到。我应该找到哪些想法来找到故障的根源?

  • 在开发环境和生产环境中都失败。
  • 尝试了几种不同的浏览器。
  • 行为与文件内容无关。二进制,文本等行为相同。
  • 尝试使用原始XMLHttpRequest而不是下面显示的jQuery ajax,但遇到了相同的行为。

服务器设置:

  • 我的网络服务托管在SharePoint 2010应用程序(ASP.NET IIS .NET 3.5)
  • 我已经检查了web.config中的httpRuntime设置,以确保它们足够大:

      httpRuntime maxRequestLength="102400" executionTimeout="3600" 
    
  • 我已经检查了applicationHost.config文件中的requestLimits设置:

      requestLimits maxAllowedContentLength="1024000000" 
    

客户代码:

客户端代码正在打包一个FormData对象,其中包含一个文件和一些json字符串中的数据:

formSubmission.prototype.attach = function (servicePath, fileInputElement, successCallback, failedCallback) {
    if (typeof window.FormData === 'undefined') {
        alert(COB.BasicForms.BROWSER_SUPPORT_MSG);
        // More work will have to be done to deal with IE 8 and 9.
        return false;
    }

    var baseServicePath = COB.BasicForms.SERVICE_ADDRESS;

    var formdata = new FormData();
    // This object will be sent as json. Some of its properties
    // are necessary for the server to process the file properly.
    formdata.append('submission', JSON.stringify(this));

    var filename = $(fileInputElement).val().split('\\').pop();
    // We will only accept one file at a time...
    formdata.append('file', fileInputElement.files[0], filename);

    var jqxhr = $.ajax({
        type: "POST",
        url: baseServicePath + "//AttachFile",
        data: formdata,
        contentType: false,
        processData: false,
        cache: false,
        dataType: "json"
    })

    .done(successCallback)
    .fail(failedCallback);
    return true;
}

服务器代码:

正如预期的那样,当返回400错误时,服务器端代码永远不会被命中。但是,当文件低于60k时,服务器端代码可以正常工作。这是带装饰的基本签名:

    [OperationContract]
    [WebInvoke(
       Method = "POST",
       BodyStyle = WebMessageBodyStyle.Bare,
       RequestFormat = WebMessageFormat.Json,
       ResponseFormat = WebMessageFormat.Json,
       UriTemplate = "AttachFile")]
    FormAttachmentResult AttachFile();

欢迎任何想法。

1 个答案:

答案 0 :(得分:1)

在它上面睡觉总是有帮助的。我忘了在web.config部分打开允许的邮件大小。默认情况下,它会将消息限制为65KB。希望在尝试设置所有旋钮和开关时帮助其他人......

http://msdn.microsoft.com/en-us/library/ms731361(v=vs.90).aspx

附加说明:

对于SharePoint用户,由于我的服务托管在vti_bin中,因此无法修改web.config,因为SharePoint会以编程方式自动挂接绑定到那里的服务。为了解决这个问题,可以使用自定义服务工厂类以编程方式访问设置。有关详细信息,请参阅此post