我正在尝试使用jQuery ajax和javascript FormData对象将文件上传到Web服务。它适用于大小约为60KB的文件。但是,对于大约70KB以上的文件,我从服务器收到“400错误请求”响应。我在某处丢失了某些东西,但似乎无法找到。我应该找到哪些想法来找到故障的根源?
我已经检查了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();
欢迎任何想法。
答案 0 :(得分:1)
在它上面睡觉总是有帮助的。我忘了在web.config部分打开允许的邮件大小。默认情况下,它会将消息限制为65KB。希望在尝试设置所有旋钮和开关时帮助其他人......
http://msdn.microsoft.com/en-us/library/ms731361(v=vs.90).aspx
对于SharePoint用户,由于我的服务托管在vti_bin中,因此无法修改web.config,因为SharePoint会以编程方式自动挂接绑定到那里的服务。为了解决这个问题,可以使用自定义服务工厂类以编程方式访问设置。有关详细信息,请参阅此post。