【问题标题】:WebRequest throwing InvalidProgramExceptionWebRequest 抛出 InvalidProgramException
【发布时间】:2017-03-01 02:30:42
【问题描述】:

我正在使用 webrequest 从远程服务器获取数据,但突然代码停止工作并开始抛出以下错误:

System.InvalidProgramException:公共语言运行时检测到一个 无效程序。在 System.Net.HttpWebRequest.GetResponse()

我尝试修复此问题,我发现如果我在 32 位模式下运行应用程序,它可以正常工作,但不适用于 64 位。我已将应用程序托管在 64 位操作系统上。

但是,它在我的本地机器上运行良好。

我想在 64 位模式下运行我的应用程序以节省更多的内存消耗问题。

【问题讨论】:

  • 你项目的目标平台是什么?
  • 项目的目标平台是“Any CPU”

标签: c# .net vb.net msbuild .net-framework-version


【解决方案1】:
  • 确保未在项目属性中启用代码优化。
  • 确保在服务器上安装了所有 Windows 更新补丁,包括最新版本的 .NET Framework。
  • 将所有 NuGet 包更新到最新的可用版本。
  • 确保服务器上的引用解析到它们在工作站上的相同程序集。如果 DLL 引用解析为旧版本,可能是针对 .NET Framework 2 构建的,这可能是罪魁祸首。
  • 作为数据收集步骤,尝试在服务器上使用调试配置。一些产生此异常的the reported Framework bugs 特定于非调试配置。
  • 确保项目以最高版本的 .NET Framework 为目标。

【讨论】:

    【解决方案2】:

    我发布了赏金并通过 weir 对答案投了赞成票,但没有足够的积分发表评论。无论如何,我们编写了一个测试程序来直接调用 GetResponse(),它在服务器上崩溃了。除了更新 Windows 和一般的任何服务器代码外,weir 的所有观点都不适用,所以我想公平地接受他的回答,以便他获得赏金,但不知道如何。发布下面的代码,以便任何人都可以在他们的盒子上更轻松地重现该问题,如果它发生在他们身上。

    Imports System.IO
    Imports System.Net
    
    Partial Class TestWebRequest
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Dim request As HttpWebRequest = CType(WebRequest.Create("https://en.wikipedia.org"), HttpWebRequest)
                request.Timeout = 30000
                Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Dim receiveStream As Stream = response.GetResponseStream()
                Dim readStream As New StreamReader(receiveStream, Encoding.UTF8)
                webRequestResponse.Text = "Result: " + readStream.ReadToEnd() + Environment.NewLine
                response.Close()
                readStream.Close()
            Catch ex As Exception
                webRequestResponse.Text = "Error Message: " + ex.ToString()
            End Try
        End Sub
    End Class
    

    【讨论】:

    • 您是否无法接受答案(“单击答案旁边的复选标记,将其从灰色切换为已填充”)?
    • 我无法接受答案(可能是因为我没有发布),但我发现点击赏金会奖励给你。谢谢!另一方面,我们发现我们的测试程序在 CLR 2.0 中工作。因此,安装在该机器上的 CLR 4.0 肯定存在一些问题,每当我们可以更新或重新安装它时,我希望它会消失(等到我们在那台服务器上有机会)。编辑:那 100 赏金仍然是可点击的。我希望你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2016-05-28
    • 2012-04-19
    • 2013-09-30
    • 2018-11-05
    相关资源
    最近更新 更多