Web API:远程api强制关闭现有连接

时间:2017-10-25 10:52:40

标签: c# web-services asp.net-web-api websocket iis-7

我试图通过请求将数据传递给Web API服务,这在我的本地工作正常。

但是当我在服务器上托管Web API时,它适用于一小组数据,但是当我通过请求传递大量数据并抛出附加异常时失败

enter image description here

我的网站.Config:

 using (var webClient = new ExtendedWebClient())
            {
                //24  Hour Timeout
                webClient.Timeout = 86400000;

                string connectionString = "Data Source=" + txtServer.Text + ";Initial Catalog=" + txtDB.Text + ";User ID=" + txtUser.Text + ";Password=" + txtPwd.Text + ";Connect Timeout=30";

                webClient.Headers.Add("data", "xyz");


                webClient.Headers.Add("token", "ABC");

                try
                {
                    var boundary = Guid.NewGuid().ToString();
                    webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
                    var fileName = String.Format("Temp_File{0:ddMMyyyyHHmmssffff}{1}", DateTime.UtcNow, ".zip");

                    //zipping up the file
                    var memStream = ZipHandler.CreateStream(new List<string>() { @"C:\Files\File1.txt", @"C:\Files\File2.txt" });
                    var bdata = new Byte[memStream.Length];
                    memStream.Read(bdata, 0, bdata.Length);
                    memStream.Close();
                    memStream.Dispose();

                    //Sending the zipped File
                    var package = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", boundary, fileName, "application/octet-stream", webClient.Encoding.GetString(bdata));


                    var strResponse = System.Text.Encoding.Default.GetString(webClient.UploadData((txtPort.Text + "/Text"), "POST", webClient.Encoding.GetBytes(package)));

                    try
                    {
                        var response = Newtonsoft.Json.JsonConvert.DeserializeObject<ApiResponse>(strResponse);
                        if (response.StatusCode != 0)
                        {
                            MessageBox.Show("Failed.\nTrace:\n" + response.Description, "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                            MessageBox.Show("success!", "success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

我的客户要求:

我正在使用WEBClient与服务进行交互

{{1}}

任何人都可以为我提供解决方案,我搜索了一些但无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

如果要发布大量数据,则必须在webconfig中指定请求限制,长度和执行最长时间。

注意:根据您的应用程序更改目标框架,在我的应用程序中为4.6.1,所以我只推出了它。

<requestLimits maxAllowedContentLength="2147483647" />

<httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />