2016-10-04 69 views
1

我使用的WebRequest獲取遠程服務器上的數據,但突然的代碼停止工作,並開始投擲以下錯誤:的WebRequest扔InvalidProgramException

System.InvalidProgramException: Common Language Runtime detected an invalid program. at System.Net.HttpWebRequest.GetResponse()

我試圖解決這個問題,我發現,如果我運行應用程序在32位模式下它工作正常,但不適用於64位。我在64位操作系統上託管了應用程序。

但是,它在我的本地機器上正常工作。

我想在64位模式下運行我的應用程序以節省更多的內存消耗問題。

+1

什麼是您的項目的目標平臺? –

+0

項目的目標平臺是「任何CPU」 – prateek

回答

1
  • 確保代碼優化未在項目屬性中啓用。
  • 在服務器上,確保已安裝所有Windows Update修補程序,包括最新版本的.NET Framework。
  • 更新任何NuGet包到最新的可用版本。
  • 確保服務器上的引用正在解析到它們在工作站上的相同程序集。如果一個DLL引用被解析爲一個較老的版本,可能是一個針對.NET Framework 2的內建版本,這可能是罪魁禍首。
  • 作爲數據收集步驟,請嘗試使用服務器上的調試配置。產生此異常的一些the reported Framework bugs特定於非調試配置。
  • 確保項目的目標是可能的最高版本的.NET Framework。
1

我發佈了賞金和upvoted堰的答案,但沒有足夠的分數留下評論。無論如何,我們編寫了一個測試程序來直接調用GetResponse(),並在服務器上崩潰。除了更新Windows和一般的任何服務器代碼外,所有堰的要點都不適用,所以我想公平地接受他的回答,以便得到賞金,但不知道如何。發佈下面的代碼,以便任何人都可以在他們的盒子上更容易地重現問題,如果它發生在他們身上。

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 
+0

您是否無法接受答案(「點擊答案旁邊的複選標記以將其從灰色變爲填充)」? – weir

+0

我不能接受答案(也許是因爲我沒有發佈它),但我發現點擊賞金會獎勵給你。謝謝!另一方面,我們發現我們的測試程序在CLR 2.0中工作。因此,無論何時我們可以更新它或重新安裝,我希望它會消失(等到我們有機會在該服務器上),肯定會在該計算機上安裝CLR 4.0的一些問題。編輯:100賞金仍然是可點擊的。我希望你明白了。 – royappa