底层连接在 HttpWebRequest POST 上关闭 在生产服务器上

2024-01-12

我收到“底层连接已关闭:连接意外关闭”。尝试在生产服务器上使用 HttpWebRequest 类进行 POST 时出错,但在我的开发计算机上它工作正常。

我最初尝试使用 WebClient 类,但我切换到 HttpWebRequest 来尝试研究问题时发现的一些建议(例如将 KeepAlive 设置为 false、PreAuthenticate true 和协议版本为 1.0)。

由于它只发生在生产服务器上,我猜测它可能与 IIS 有关。

这是我的代码

        HttpWebRequest HttpWReq =
        (HttpWebRequest)WebRequest.Create(webURL);

        ASCIIEncoding encoding=new ASCIIEncoding();
        Byte[] postbytes = Encoding.ASCII.GetBytes(data);

        HttpWReq.Headers.Add("Authorization",
                  String.Format("Basic {0}", authstring));
        HttpWReq.KeepAlive = false;
        HttpWReq.PreAuthenticate = true;  
        HttpWReq.Credentials = CredentialCache.DefaultCredentials;
        HttpWReq.UseDefaultCredentials = true;
        HttpWReq.ProtocolVersion = HttpVersion.Version10;


        HttpWReq.Method = "POST";
        HttpWReq.ContentType = "application/x-www-form-urlencoded";
        HttpWReq.ContentLength = postbytes.Length;

        Stream newStream = HttpWReq.GetRequestStream();
        newStream.Write(postbytes, 0, postbytes.Length);
        newStream.Close();

我最初尝试使用 WebClient 类的代码

  /*  WebClient client = new WebClient();
    client.Headers.Add("Authorization",
              String.Format("Basic {0}", authstring));
    client.Headers.Add("Content-Type",
                       "application/x-www-form-urlencoded");
    client.UseDefaultCredentials = true;
    System.Net.ServicePointManager.Expect100Continue =  false;

     Byte[] postbytes = Encoding.ASCII.GetBytes(data);

    byte[] resp = client.UploadData(webURL, "POST", postbytes); */

谢谢,任何帮助将不胜感激。

EDIT:

使用 fidler 检查标头我得到了这个信息

POST [MyWebSite] HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-            flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: [MyWebSite]
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; GTB6.5; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: [MyHost]
Content-Length: 188
Connection: Keep-Alive
Pragma: no-cache
Cookie: __utma=62854692.1254171006.1276438746.1289273298.1289317993.21; __utmz=62854692.1277743505.3.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=yeled; ASPSESSIONIDQQQRCRAT=ANNHGGNBNOFNFCLHPBEJIMLC

__VIEWSTATE=%2FwEPDwUKMjA0OTM4MTAwNGRktZi0IsIUo6MOCYTxun8p8Po4AWeTtipGZ4L9%2FkY3KZU%3D&__EVENTVALIDATION=%2FwEWAgLHhsXtBwK14deQBbiFCpWBnsp%2BicqBy%2FNXAkhuVDX9WF1jZayRuTgPc3Ov&btnTest=Test

EDIT2

如果将目标框架(我使用一个新项目进行测试)设置为 2.0(我没有测试框架的每个版本),它就可以工作。我猜测 .net 在 .net 4.0 中以不同的方式处理安全性。这不是一个解决方案,但我希望有人可以使用该信息来帮助我解决这个问题。


这是 keep-alive 和 100-continue 的典型例子。到目前为止我看到的所有案例都是由于这个问题造成的,所以我想说你走在正确的轨道上。

首先,使用 Fiddler 获取请求原始视图,看看您的请求是什么样子的。我打赌你有Expect:100-continue在那里。所以尝试一下HttpWReq.Expect="";

您似乎正在使用 Windows 身份验证,请尝试将其关闭,看看这是否会产生问题 - 显然您不能一直将其关闭,只需看看行为是什么。

UPDATE

首先,我几乎可以肯定这与您发送的请求不同。这是用户代理,它告诉我这不是您的 HttpWebRequest:

Mozilla/4.0(兼容;MSIE 7.0; Windows NT 5.1;三叉戟/4.0; GTB6.5; InfoPath.2; .NET CLR 2.0.50727; 。网 CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)

还有视图状态让我相信这只是浏览器的另一个请求。也不是 1.1 协议。

我还注意到您没有得到可能与之相关的回复。您需要调用 request.GetResponseStream 并读取它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

底层连接在 HttpWebRequest POST 上关闭 在生产服务器上 的相关文章

随机推荐

  • Django - 如何让永久链接与“一次性”slug 一起使用

    我正在尝试将 slugs 添加到我的 django 应用程序中的 url 中 就像这样做一样 目前 我的页面可以使用如下网址正常工作 http example com foo 123 我想添加 slugified 网址 如下所示 http
  • Fluent NHibernate:混合自动映射和手动映射

    如果使用 Fluent NHibernate 是否可以自动映射大多数类 但指定应使用常规 Fluent API 映射几个特定类而不是自动映射 如果是这样 有人可以向我指出一些示例代码来展示如何做到这一点吗 Thanks 有可能的and容易混
  • 如何解决 UserWarning: findfont: Could not match :family=Bitstream Vera Sans

    下列的这个例子 http matplotlib org users transforms tutorial html axes coordinates import numpy as np import matplotlib pyplot
  • Android 和 Java 中的 TimeZone.getAvailableIDs

    我是 Android 中时区列表的 TimeZone getAvailableIDs 与 Java 相比 它在 Android 中的行为有所不同 String tzone TimeZone getAvailableIDs 3 3600 10
  • Apache 和 SSL 背后的 Tomcat

    我到处寻找但找不到针对以下情况的明确解决方案 我们有一个 Web 应用程序 Grails Spring Security 在 apache 后面的 tomcat 中运行 Part应用程序的一部分需要在 https 上运行 因此使用 Spri
  • 在jpanel上画线

    我想让它像画一把尺子 带有 90 度角刻度线的线 https stackoverflow com questions 3488419 java draw a ruler line with tick marks at 90 degree a
  • 类的 Python repr

    As the Python 2 文档 repr http docs python org 2 reference datamodel html object repr 状态 如果可能的话 这个 即 repr 应该看起来像一个有效的 Pyth
  • 将数据拆分为 3 列数据框

    我在将数据文件解析为数据帧时遇到问题 当我使用 pandas 读取数据时 我得到一个包含所有信息的一列数据框 Server 7 14 182 917 20 Dec 2018 08 30 21 0500 GET tools performan
  • 在线 Internet Explorer 模拟器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 试图找到类似的问题 重复的问题 失败 我在mac上开发 我爱我的麦克 我使用 Chrome Firefox 和 Safari 进行开发 我
  • ajax请求中变量丢失

    当尝试将变量作为参数传递给嵌套的 ajax 请求回调时 我遇到了奇怪的行为 form on submit function e ajaxSetup header meta name token attr content e preventD
  • chrome.tab.onactivated

    有人可以告诉我如何使用chrome tabs onActivated 如果 url 等于 我想刷新单击 激活的选项卡 www example com http www example com 或者 如果这是错误的方法 请告诉我该使用什么 首
  • 首次通过 URL 方案打开时 iOS 应用程序崩溃

    我的应用程序处理 URL 方案 当它已经运行并从另一个应用程序调用时 它的行为正确并且没有问题 但是 当它完全关闭时 如在非后台模式下 并且另一个应用程序调用它 它会立即崩溃 我已经设置了 等待可执行文件启动 选项 以便我可以调试appli
  • ES6模块是同步加载还是异步加载?

    模块加载器负责加载模块 我所知道的是 模块加载器在浏览器中异步加载模块 而在 Node js 中它是同步加载的 我想确认一下这个信息是否正确 ES6 模块加载器将是异步的 而 Node js 模块加载器则不是 以下是模块加载器的一些关键方面
  • 从 html 访问 $scope?

    由于愚蠢的第三方原因 我需要从html访问 scope 这就是我正在尝试的 Because angular是全局暴露的 你可以使用 var scope angular element scope 例如 如果您的标记中有此内容 div div
  • 我想在页面过期(419)显示时重定向到登录页面

    我在 handler php 中添加了这段代码 if exception instanceof Illuminate Session TokenMismatchException return redirect gt route login
  • 根据背景颜色改变汉堡菜单的颜色

    有一个白色的汉堡菜单 问题是 在我的项目中 由于背景不透明 网站的某些地方不可见 任务是编写一个脚本 该脚本应根据背景颜色将颜色更改为对比色 例如 在下面的代码中 在黑色背景上 菜单应变为白色 最初的计划是为每个块分配不同的ID 当菜单图标
  • 如何将 Apache 日志重定向到 STDOUT 和 Apache 日志文件

    我正在运行一个 docker 容器 想要将 apache 服务器的日志写入 STDOUT 和文件 知道我的 Apache httpd conf 文件需要什么样的配置吗 任何帮助将不胜感激 你可以试试这个 CustomLog usr bin
  • 如何将字符串写入远程服务器(linux)中的文件

    我试图构建一个小代码 在其中创建一些字符串并将该字符串传输到位于远程服务器中的文件 应在运行时创建 就我而言 远程服务器是 Linux 有人可以帮我吗 我正在使用 JSCH 和 ChannelSftp 但无法执行此操作 下面是我的代码 JS
  • Mono:堆部分太多当应用程序占用内存超过 4 GB 时,增加 MAXHINCR 或 MAX_HEAP_SECTS

    我正在具有 8 GB 内存的 bitnami linux 上运行我的单声道应用程序 它是一个复杂的文件合并应用程序 在运行时应该占用大量 RAM 但每次需要超过 4 GB 的 RAM 时 它都会崩溃并显示以下错误消息 Too many he
  • 底层连接在 HttpWebRequest POST 上关闭 在生产服务器上

    我收到 底层连接已关闭 连接意外关闭 尝试在生产服务器上使用 HttpWebRequest 类进行 POST 时出错 但在我的开发计算机上它工作正常 我最初尝试使用 WebClient 类 但我切换到 HttpWebRequest 来尝试研