C# 网站调用asp.net Web api-图像上载失败
问题 我需要更改什么超时或设置 概述显示实验A-E 摘要 我有一个网站,可以对asp.net web api网站进行xhr api调用。它正在上传图像。它将图像作为带有Base64Content属性的json对象发送。字节由web api站点进行base64编码和自动解码 我在VisualStudio中设置了我的web项目并进行了调试,我还可以构建它并从IIS运行它 我尝试过的 A。如果我使用Telerik Fiddler web调试器测试对web api rest站点的api调用,它会成功。这意味着,如果请求成功到达web api服务器,它将成功。所有的后端代码都很好 B。当失败时,Chrome调试器将原始请求放入调试器工具。我可以接受原始请求,将其复制/粘贴到Fiddler中,然后它就可以工作了。网站中负责生成请求的ajax部分都很好(ajax代码正确地生成了请求) C。如果我使用IIS Express在Visual Studio中的调试中运行我的网站,则不会出现此问题。它只发生在IIS中。整个C# 网站调用asp.net Web api-图像上载失败,c#,iis,C#,Iis,问题 我需要更改什么超时或设置 概述显示实验A-E 摘要 我有一个网站,可以对asp.net web api网站进行xhr api调用。它正在上传图像。它将图像作为带有Base64Content属性的json对象发送。字节由web api站点进行base64编码和自动解码 我在VisualStudio中设置了我的web项目并进行了调试,我还可以构建它并从IIS运行它 我尝试过的 A。如果我使用Telerik Fiddler web调试器测试对web api rest站点的api调用,它会成功。
web.config
是相同的
D。如果我通过网页本身(使用Chrome)对IIS进行测试,结果显示500kb文件成功,但1MEG文件失败
E。当它失败时,不会有任何关于该请求到达web api服务器的记录。我已经进行了全面追踪,但什么都没有显示
当它失败时,无论文件大小如何,它总是在5秒时失败。因此,我得出结论,导致失败的不是文件大小,而是任何需要5秒以上时间的上传
我的设置
我找不到任何需要更改但尚未更改的设置
请求日志
491472: URL_REQUEST
http://tmorrow-12v.hs.com/HS.REST.HomeownerPortal/api/tickets/281/images
Start Time: 2015-10-20 18:51:35.464
t=2876 [st= 0] +REQUEST_ALIVE [dt=4996]
t=2876 [st= 0] URL_REQUEST_DELEGATE [dt=14]
t=2890 [st= 14] +URL_REQUEST_START_JOB [dt=4982]
--> load_flags = 73986 (BYPASS_CACHE | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VERIFY_EV_CERT)
--> method = "POST"
--> priority = "LOW"
--> upload_id = "0"
--> url = "http://tmorrow-12v.hs.com/HS.REST.HomeownerPortal/api/tickets/281/images"
t=2890 [st= 14] URL_REQUEST_DELEGATE [dt=1]
t=2891 [st= 15] HTTP_CACHE_GET_BACKEND [dt=0]
t=2891 [st= 15] URL_REQUEST_DELEGATE [dt=0]
t=2891 [st= 15] +HTTP_STREAM_REQUEST [dt=1]
t=2891 [st= 15] HTTP_STREAM_REQUEST_STARTED_JOB
--> source_dependency = 491473 (HTTP_STREAM_JOB)
t=2892 [st= 16] HTTP_STREAM_REQUEST_BOUND_TO_JOB
--> source_dependency = 491473 (HTTP_STREAM_JOB)
t=2892 [st= 16] -HTTP_STREAM_REQUEST
t=2892 [st= 16] +HTTP_TRANSACTION_SEND_REQUEST [dt=4980]
t=2892 [st= 16] HTTP_TRANSACTION_SEND_REQUEST_HEADERS
--> POST /HS.REST.HomeownerPortal/api/tickets/281/images HTTP/1.1
Host: tmorrow-12v.hs.com
Connection: keep-alive
Content-Length: 2632959
Pragma: no-cache
Cache-Control: no-cache
Authorization: Basic [52 bytes were stripped]
Origin: http://tmorrow-12v.hs.com
HSHO-Cookie: UserProfile=userid=31&username=tmorrow%40hyphensolutions.com&appguid=a967da12-2965-4b23-921b-ed8a386649f4&buildproappguid=0b43e124-7755-4194-a441-1836f8e6db48&loginexpiration=10%2f21%2f2015+12%3a00%3a00+AM&Expires=10%2f21%2f2015+12%3a00%3a00+AM&reqver
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/plain, */*
Referer: http://tmorrow-12v.hs.com/homeownerportal/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: [38 bytes were stripped]
t=2892 [st= 16] HTTP_TRANSACTION_SEND_REQUEST_BODY
--> did_merge = false
--> is_chunked = false
--> length = 2632959
t=7872 [st=4996] CANCELLED
t=7872 [st=4996] -URL_REQUEST_START_JOB
--> net_error = -3 (ERR_ABORTED)
t=7872 [st=4996] URL_REQUEST_DELEGATE [dt=0]
t=7872 [st=4996] -REQUEST_ALIVE
嗯,嗯,是的。经过3天的调试,我发现: 最初的开发人员使用这段代码向客户端逻辑添加了一个http拦截器,我没有按照请求过滤器的思路思考,也没有在我的项目中搜索“5000”。当我看到
$http
没有使用timeout
参数时,我假设没有
'use strict';
angular.module('myApp')
.factory('timeoutHttpIntercept', function () {
//this adds a timeout to every AJAX request
return {
'request': function(config) {
config.timeout = 5000;
return config;
}
};
});
为了修复它,我刚刚将值从5000更改为60000。RESTAPI服务器的web.config中不需要任何特殊值
web服务器需要web.config中的以下设置:
嗯,是的。经过3天的调试,我发现: 最初的开发人员使用这段代码向客户端逻辑添加了一个http拦截器,我没有按照请求过滤器的思路思考,也没有在我的项目中搜索“5000”。当我看到
$http
没有使用timeout
参数时,我假设没有
'use strict';
angular.module('myApp')
.factory('timeoutHttpIntercept', function () {
//this adds a timeout to every AJAX request
return {
'request': function(config) {
config.timeout = 5000;
return config;
}
};
});
为了修复它,我刚刚将值从5000更改为60000。RESTAPI服务器的web.config中不需要任何特殊值
web服务器需要web.config中的以下设置:
是否尝试为ajax调用添加超时?如果您使用的是JQuery ajax函数,那么错误处理程序可能会揭示导致失败的原因。@PankajKapare,谢谢。我在AngularJS中使用$http。传递给故障块的对象为空。客户端代码未使用超时。当它在IIS Express中运行时,它工作正常,所以一定不会有任何角度超时(或者我的原因是这样)。无论如何,我尝试了$http
的超时
,并将其设置为3000(3秒),只是想看看它会做什么。没有效果。您是否尝试为ajax调用添加超时?如果您使用的是JQuery ajax函数,那么错误处理程序可能会揭示导致失败的原因。@PankajKapare,谢谢。我在AngularJS中使用$http。传递给故障块的对象为空。客户端代码未使用超时。当它在IIS Express中运行时,它工作正常,所以一定不会有任何角度超时(或者我的原因是这样)。无论如何,我尝试了$http
的超时
,并将其设置为3000(3秒),只是想看看它会做什么。没有效果。