내 응용 프로그램에서 Apache Thrift를 사용하여 여러 대의 컴퓨터간에 데이터를 교환합니다..Net의 Apache Thrift 비 직렬화의 이상한 동작
나는 outspace에서 데이터를 recive, 전송, 프로토콜을 생성하고 recived 데이터 deserialize 개체로. 다른 유형의 직렬화 복원이 예외가 발생하기 때문에 내가 TCciUserLoginV1.cciUserLoginV1_result직렬화 된 바이너리 받아 봐 것으로,
using (var memoryStream = new MemoryStream(data))
{
using (var transport = new TStreamTransport(memoryStream, memoryStream))
{
transport.Open();
using (var protocolo = new TBinaryProtocol(transport))
{
var result = new TCciUserLoginV1.cciUserLoginV1_result();
while (result.Success== null)
{
try
{
result.Read(protocolo);
}
catch { }
}
if (result.Success != null)
{
res = new RequestResult(result.Success);
}
else
{
res = new RequestResult(ResultCodes.LOCAL_ERROR");
}
}
}
}
내가 아는 : 다음은 내 코드입니다. 그러나 정상적인 비 직렬화 결과 .Success 속성은 사이클 중 10 번째 반복 이후에만 발생합니다. 왜 내가 을 사용하고을 사용 했는가? 아무도 나에게 무슨 일이 일어나는지 말해 줄 수 있습니까?
미리 감사드립니다.
이상하게 들립니다. 프로토콜/전송 설정을 두 번 확인 했습니까? 어쩌면 당신은 불균형 방식으로 액자 운송을 사용 했습니까 (또는 사용하지 않았습니까?)? 그 외에는 재현 할 수있는 테스트 케이스를 원하고 있습니다. 가지고 계신 분이 있다면 (위의 내용은 누락되었으므로 일부 내용이 누락 된 것이 아닙니다.) 해당 정보를 저희와 공유하십시오. 여기 또는 SO 또는 메일 링리스트에 있습니다. 버그 일 확률이 높은 경우 JIRA 티켓을 제출하십시오. – JensG
미안하지만 내 응용 프로그램이 내게 접근하기 어려운 서비스에서 정보를 암송하기 때문에 테스트 정보를 제공 할 수는 없지만 서비스 개발자는 모든 코드가 올바른지 확인하고 Java로 변환 한 후 모든 것이 잘 동작합니다 사이클없이. 어쩌면 IDL을 C# 코드 생성자에게 보낸다. – ArhiChief
"아마 C# 코드 생성기에 IDL을 절약하는 데 문제가있을 수 있습니다."- 아니요. 그러나 당신이 [sscce] (http://sscce.org)를 어떻게 든 제공 할 수 없다면 우리는 여기서 멈추게됩니다. 들어오는 데이터 스트림을 파일로 캡쳐하는 것은 어떻습니까? 이렇게하면 우리는 그것을 코드로 직접 먹일 수 있습니다. – JensG