2013-09-24 3 views
1

필자는 파일 업로드를 허용하는 ServiceStack에 웹 서비스를 작성했습니다. 나는 다음과 같은 코드를 사용했습니다를 테스트하려면 :파일 업로드를 처리하는 웹 서비스가 로컬에서는 작동하지만 원격에서는 작동하지 않습니다.

string filePath = @"C:\myFile.pdf"; 
string webApi = @"http://localhost:20938/upload/myFile.pdf"; 

HttpWebRequest client = (HttpWebRequest)WebRequest.Create(webApi); 
client.Method = WebRequestMethods.Http.Post; 
client.AllowWriteStreamBuffering = false; 
client.SendChunked = true; 
client.ContentType = "multipart/form-data;"; 
client.Timeout = int.MaxValue; 

using (FileStream fileStream = File.OpenRead(filePath)) 
{ 
    fileStream.Copy(client.GetRequestStream()); 
} 

var response = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd(); 

이 로컬 호스트와 함께 작동하지만 원격 서버에 배포 할 때, 그것은 작동하지 않습니다. 500 내부 오류가 발생했습니다. JSON 데이터를 반환하는 다른 웹 API 호출은 완벽하게 로컬 및 원격으로 작동합니다.

어떻게 수정/디버깅합니까?

+0

문제를 해결 했습니까? – stefan2410

+0

아니요. AllowWriteStreamBuffering = true를 시도했지만 작동하지 않았습니다. 필자는 원격 디버거를 설치하지 못했습니다. 코드를 주석 처리하고 배치하므로 문제가있는 부분을 지적 할 수 있습니다. 스택 추적을 얻을 수있는 방법이 있었으면 좋겠어. – Gerson

+0

서비스 기록 로깅을 사용합니까? 또한 서버 포트를 차단하는 방화벽이 있습니까? 당신은 서버의 코드를 쓸 수 있습니까? – stefan2410

답변

1

아래 코드는 저에게 효과적입니다. 유일한 차이점은 AllowWriteStreamBuffering = true입니다.

  string requestUri = Path.Combine(serverIP + @"/upload/", filename); 
      HttpWebRequest client = (HttpWebRequest)WebRequest.Create(requestUri); 
      client.Method = WebRequestMethods.Http.Post; 

      client.AllowWriteStreamBuffering = true; 
      client.SendChunked = true; 
      client.ContentType = "multipart/form-data;"; 
      client.Timeout = int.MaxValue; 
      using (FileStream fileStream = File.OpenRead(filePath)) 
      { 
       fileStream.Copy(client.GetRequestStream()); 
      } 
      var response = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd(); 

포트를 차단하는 방화벽이 있습니까?

1

문제가 해결되었습니다. 문제는 코드의 다른 부분에있었습니다. 서비스 스택 로깅을 통해 찾을 수있었습니다.

+0

이것은 답변이 아닙니다. 우리는 당신을 도우 려하고 경험을 공유하려고 노력했으며 ServiceStack 로깅에 대한 조언을 따랐습니다. 자신의 답변을 수락하기 전에 공통된 지식 기반을 향상시키기 위해 최소한의 경험으로 최소한의 경험을 공유하십시오. 그러면 투표 할 수도 있습니다. – stefan2410

+0

제가 사용했던 타사 라이브러리 중 하나가 30 일 평가판에있었습니다. 내 로컬 컴퓨터가 30 일 평가판 내에 있으므로 제대로 작동했습니다. 30 일 재판이 만료 되었기 때문에 원격 컴퓨터가 아닙니다. 모든 것이 나에게 준 것이기 때문에 나는 그것을 몰랐다. 로깅을 사용하면 오류가 기록된다. 나는 벤더에게 확장을 요청하고, 그것을 적용하고 적용했다. – Gerson

관련 문제