2016-10-04 7 views
1

을 던지는 WebRequest 클래스 :내가 원격 서버에서 데이터를 가져 오기 위해 WebRequest 클래스를 사용하고 갑자기 코드가 작동을 중지하고 던지는 다음과 같은 오류를 시작 InvalidProgramException

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

나는 노력이 문제를 해결, 내가 발견 나는 응용 프로그램을 실행하는 경우 32 비트 모드에서는 잘 작동하지만 64 비트에서는 작동하지 않습니다. 64 비트 OS에서 응용 프로그램을 호스팅했습니다.

그러나 로컬 컴퓨터에서는 정상적으로 작동합니다.

더 많은 메모리 소비 문제를 방지하기 위해 64 비트 모드로 응용 프로그램을 실행하고 싶습니다.

+1

프로젝트의 대상 플랫폼은 무엇입니까? –

+0

프로젝트의 대상 플랫폼이 "모든 CPU"입니다. – prateek

답변

1
  • 프로젝트 속성에서 코드 최적화가 활성화되어 있지 않은지 확인하십시오.
  • 서버에서 최신 버전의 .NET Framework를 포함하여 모든 Windows Update 패치가 설치되어 있는지 확인하십시오.
  • 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