.NET이 웹 서비스에서 기본 배열을 역 직렬화하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/30171

  •  09-06-2019
  •  | 
  •  

문제

도와주세요!C # 애플리케이션에서 사용중인 Axis 웹 서비스가 있습니다.long 값의 배열은 항상 올바른 길이 인 [0,0,0,0]으로 표시되지만 값이 역 직렬화되지 않는다는 점을 제외하면 모든 것이 잘 작동합니다.나는 다른 프리미티브 (ints, doubles)로 시도했고 같은 일이 발생합니다.어떡하죠?내 서비스의 의미를 변경하고 싶지 않습니다.

도움이 되었습니까?

해결책

이렇게 결과를 얻었습니다.다른 해결책을 찾지 못했기 때문에 더 나은 것이 있다면 꼭 기여해주세요.

먼저, wsdl : types 영역의 긴 배열 정의 : 라코 디스

다음으로 수정을 수행 할 SoapExtensionAttribute를 만듭니다.문제는 .NET이 double 값을 포함하는 요소에 대한 다중 참조 ID를 따르지 않는 것 같습니다.그래서 우리는 배열 항목을 처리하고 값을 찾은 다음 요소에 값을 삽입합니다. 라코 디스

마지막으로 긴 배열을 역 직렬화 할 Reference.cs 파일의 모든 메서드에 다음 속성을 태그합니다. 라코 디스

이 수정 사항은 장기적으로 적용되지만이 문제가있는 모든 기본 유형을 처리하도록 일반화 할 수 있습니다.

다른 팁

다음은 내가 쓴 블로그 게시물 의 다소 복사하여 붙여 넣은 버전입니다. 주제.

총괄 요약 : .NET이 결과 집합을 역 직렬화하는 방식을 변경하거나 (위의 Chris의 솔루션 참조) Axis를 재구성하여 .NET SOAP 구현과 호환되는 방식으로 결과를 직렬화 할 수 있습니다.

후자의 경로로 이동하는 경우 방법은 다음과 같습니다. <인용구>

... 생성 된 수업은 모양과 기능을 보인다 일반적으로하지만 클라이언트에서 역 직렬화 된 배열 (.NET / WCF) 쪽에서 배열이 역 직렬화되었습니다. 잘못되고 모든 값은 배열은 0입니다. 수동으로 반환 된 SOAP 응답을 살펴보십시오. 무엇이 잘못되었는지 알아 내기위한 Axis; 여기에 샘플 응답이 있습니다 (다시, 명확성을 위해 편집 됨) : 라코 디스 <인용구>

Axis는 직접 값을 생성 반환 된 요소 대신 외부 요소 참조 가치. 이것은 많은 참조가 있습니다 상대적으로 이산 값이 적지 만 어떤 경우이든 이것이 적절하지 않습니다. WCF basicHttpBinding에서 처리 제공 업체 (및 gSOAP 및 클래식 .NET 웹 참조).

해결책을 찾는 데 시간이 걸렸습니다. Axis 배포 편집 server-config.wsdd 파일을 찾아 다음 매개 변수 : 라코 디스 <인용구>

false로 변경하고 그런 다음 명령 줄을 통해 재배포합니다. (Windows에서) 뭔가 보이는 다음과 같이 : 라코 디스 <인용구>

웹 서비스의 응답은 이제 역 직렬화 가능해야합니다. .NET 클라이언트에 의해.

더 나은 대안을 제공 할 수있는 다음 링크를 찾았습니다. http://www.tomergabel.com/GettingWCFAndApacheAxisToBeFriendly.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top