2015-02-04 7 views
0

이 문제는 나를 미치게했습니다. 희망을 갖고 누군가가 대답을 찾을 수 없어서 대답을 알고 있습니다.응답 텍스트 정보가 없습니다. (vb6 호출)

나는 우리의 기존 VB6 애플리케이션 중 하나에서 웹 서비스에 액세스하려고 다음

Dim xmlHttpRequest As MSXML2.ServerXMLHTTP 
Dim xmlParameters As String 
Dim timeOutValue As Long 

timeOutValue = 300 * 1000& 
xmlParameters = "TradingPartnerName=" + inTradingPartnerName 
Set xmlHttpRequest = New MSXML2.ServerXMLHTTP 
xmlHttpRequest.Open "POST", urlString, False 
xmlHttpRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlHttpRequest.setRequestHeader "Host", "xa-2k8:2016/" 
xmlHttpRequest.setTimeouts timeOutValue, timeOutValue, timeOutValue, timeOutValue 

xmlHttpRequest.sEnd (xmlParameters) 

그것은 기본적으로 (이 경우 값이 매개 변수 "TradingPartnerName"와 API를 호출을 " DSSI "). 나중에 구문 분석 된 JSON 결과를 반환합니다.

내가 Wireshark를보고에서 돌아가는 것은 다음 올바른 모든 데이터가

WireShark results

...

내가 보낸 후 xmlHttpRequest.responseText 볼

(또는 나는 다음과 같은 수) .responseBody을 디코딩 :

ResponseText : "{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualif" 

그것은 429 문자의 모든 시간에 절단

다음은 다시 전송할 콘텐츠 유형입니다. 콘텐츠 유형 → application/json; charset = utf-8

내가 잘못 했나요? 아니면 도서관의 버그입니까? 나는 또한 WinHTTP 5.1로 시도하고 정확한 결과를 얻었다.

내가 stackoverflow에서 본 다른 모든 예제에서 사람들은 wireshark 분석에서도 데이터가 누락되었습니다. 내 경우, 모든 올바른 데이터가 반환되는 것을 볼 수 있으므로 왜 잘리지 않는지 알 수 없습니다.

미리 감사드립니다.

EDIT : 나는 GSerg의 제안에 더 깊이 파고 들어가는 인코딩으로 연주했으며, 이진 형식의 responseBody를 문자열로 변환 할 때 다른 디코드 형식을 사용하면 다른 결과를 얻습니다. 나는 캐릭터 "UTF-8"을 한 경우

Function BinaryToString(ByVal Binary) 
    BinaryToString = "" 
    Dim BinaryStream 
    Set BinaryStream = CreateObject("ADODB.Stream") 

    BinaryStream.Type = 1 '--- adTypeBinary 

    BinaryStream.Open 
    BinaryStream.Write Binary 

    BinaryStream.Position = 0 
    BinaryStream.Type = 2 '--- adTypeText 

    BinaryStream.Charset = (UTF-8 or ASCII) 

    BinaryToString = BinaryStream.ReadText 
End Function 

내가 다음 얻을 : 다음과 같은 방법으로

나는 캐릭터 세트를 만들 경우

"{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQua 

을 "ASCII"나는 다음을 얻을 :

"{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualifier":"12","ReceiverId":"(removed)","ElementSeparator":"*","SubElementSea" 
따라서 인코딩 문제 인 것처럼 보이지만 ASCII로 전환하면 전체 결과 집합을 얻지 못하는 것 같습니다.
+0

가 http://stackoverflow.com/q/10451064/11683 도움이됩니까이 결론을 도출 도움이? – GSerg

+0

제안 해 주셔서 감사합니다. 그러나 슬프게도, 나는 이전에 그것을 보았습니다. 대신 responseBody를 사용하려고 시도했을 때 문자열로 변환 된 정확한 자리로 잘 렸습니다. – Scott

+0

GSerg, 당신의 대답은 실제로 맞는 것입니다. 이 점을 이해하는 데 조금 시간이 걸렸지 만, 내가 추가 한 모든 수정 정보가 있습니다. "responseBody"가 모든 데이터를 보내기 시작했으나 test = BinaryToString에 대한 감시를 설정하면 디버거에서 응답의 일부만 표시합니다. (xmlHttpRequest.responseBody). 그래도 메시지 상자로 보내면 전체 값이 표시됩니다. 그래서 나는 디버거에서만 그 필드에 대한 제한을 치는 것처럼 보입니다. 도움 주셔서 감사합니다. 대답으로 추가하면 받아 들일 것입니다. 다시 한 번 감사드립니다! – Scott

답변