C# 网站调用asp.net Web api-图像上载失败

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调用,它会成功。

问题

我需要更改什么超时或设置

概述显示实验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中。整个
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秒),只是想看看它会做什么。没有效果。