WebRequest抛出InvalidProgramException

时间:2016-10-04 14:02:14

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

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

  

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

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

但是,它在我的本地计算机上工作正常。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我发布了赏金并由堰支持了答案,但没有足够的分数留待评论。无论如何,我们编写了一个测试程序来直接调用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