2009-08-13 6 views
0

Visual Studio 2008, .NET 2.0에서 생성 된 Java 웹 서비스 (Https)에 일부 C# 스텁이 있습니다. 서버에서 요청을 청크 할 수 없습니다. HttpWebRequest에서 sendChunked를 false로 설정할 수있었습니다.청크가 허용되지 않는 서버에 HttpWebRequest가 작동하지 않습니다.

전선을 가로 지르는 데이터가 거의없는 웹 서비스 메서드를 호출하면 제대로 작동합니다.
그러나 상당한 양의 데이터가 포함 된 요청을 보내면 "요청을 구문 분석 할 수 없음"오류가 발생합니다. 여기

은이 개 이상한 일들입니다 : 이것은 HttpConstants.CHUNKED false로 설정하여 자바를 통해 잘 작동

  1. , 당신이하지 않으면 그것은 "요청 오류를 구문 분석 할 수 없습니다"같은과 함께 나누기 있음 .
  2. 백그라운드에서 피들러를 실행하면 모든 것이 잘 작동합니까?! 나는 이것이 그들을 보내기 전에 요청 바이트를 버퍼링하는 피들러 때문이라고 생각한다. 참고 : "암호 해독 HTTPS"로 피들러 옵션을 해제하면 작동을 멈 춥니 다.
+0

피들러의 버퍼링으로 인해 문제가 재현되지 않는 이유를 설명 할 수 있지만 문제가 실제로 청크 인코딩이 아님을 알 수 있습니다. 피들러는 청크 인코딩을 제거하지 않는 한 청크 인코딩을 제거하지 않기 때문입니다. – EricLaw

답변

0

아, 고전적인 "관찰을 통한 동작 변화". 문제는, 당신이 지적한대로, Fiddler는 버퍼링 등을하고 있습니다. 하나의 옵션은 HTTPS를 (일시적으로) 끄고 Wireshark과 같은 수동 네트워크 스니핑 도구를 사용하여 .NET이 설정중인 설정을 따르는 지 확인할 수 있습니다.

+0

Fiddler가 내 코드에서 수행하는 작업을 모방하는 방법이 있습니까? –

+0

좋아요, Wireshark에서 요청한 적이 있습니다. 전에 사용 해보지 않은 내용이 있습니까? 내가 찾고 있어야 할 힌트가 있습니까? 그게 청크인지 아닌지 어떻게 말할 수 있습니까? –

+0

Wireshark의 정보는 Fiddler에서 보는 것과 비슷합니다. 요청 패킷 중 하나를 마우스 오른쪽 버튼으로 클릭하고 '스트림을 따르십시오'를 선택하십시오. 데이터가 앞뒤로 이동하는 팝업 창이 나타납니다. HTTP 헤더가 표시되어 더 잘 이해할 수 있습니다. 참고 : Wireshark는 HTTPS를 통해 볼 수 없으므로 표준 HTTP를 사용해야합니다. 그것은 HTTP를 통해 휴식하지 않으면,이 많은 도움이되지 않습니다. –

0

"스텁"이 무슨 뜻인지 분명치 않습니다. 자바 서비스에 대한 웹 참조를 만들었다는 의미입니까? 그렇다면

, 당신은 false로 설정 SendChunked 속성을 HttpWebRequest 자신을 반환 GetWebRequest 메소드를 오버라이드 (override) 할 수 있습니다

public partial class Service1 
{ 
    protected override WebRequest GetWebRequest(Uri uri) 
    { 
     HttpWebRequest request = (HttpWebRequest) base.GetWebRequest(uri); 
     request.SendChunked = false; 
     return request; 
    } 
} 

을이 당신이 다음 명확히하십시오 요구하고하지 것입니다 경우.

+0

예, 스텁은 Java 서비스에 대한 웹 참조입니다. 위의 코드는 내가 현재 갖고있는 것과 정확히 일치합니다.그러나 전체 요청이 어떤 이유로 서버에 전달되지 않는 것처럼 보입니다. 그러나 Fiddler가 실행 중일 때와 같습니다. –

+0

Microsoft 네트워크 모니터 또는 덜 관입하는 것이 필요할 수 있습니다. http://www.microsoft.com/downloads/details.aspx?FamilyID=983b941d-06cb-4658-b7f6-3088333d062f&displaylang=en을 참조하십시오. –

+0

특히, 이것은 청킹 문제처럼 들리지 않습니다. 빨간 새끼일지도 모릅니다. –

0

이 문제가 해결되었습니다. Visual Studio에서 "웹 참조 추가"를 사용하여 웹 서비스 메서드에 스텁을 만들면 서버를 불만족스럽게 만드는 웹 요청에 무언가를 추가하는 것처럼 보입니다. 처음부터 XML을 생성하고 스텁을 사용하지 않고 웹 요청을 보내는 자체 메서드를 작성하여 올바르게 작동합니다. 나는 이런 문제가 싫다.

+1

수정 된 코드를 가져 와서 Fiddler를 통해 요청을 캡처하고 Fiddler를 통해 캡처 한 원래 요청을 받아 들인다면 Windiff를 사용할 수 있습니다. 두 사람이 정확히 어떻게 다른지 확인하십시오. – EricLaw

관련 문제