2010-02-12 4 views
0

이것은 매우 이상한 일이며, 누구든지이 사실을 설명 할 수 있는지 궁금합니다. 기존의 asmx 스타일 웹 서비스로 실행되는 웹 서비스가 있습니다. 우리에게는 다음과 같이 소비자에게 표시되지 않는 내부 방법으로 사용 된 공개 속성이 있습니다.IIS 6에서 제공하는 WSDL에서 공개 속성이 누락되었습니다.

여기는 이상한 부분입니다. 우리는이 들판을 제거하기로 결정했습니다. 그러나 Apache Axis 클라이언트는 특정 wsdl에 묶여 있기 때문에 wsdl에서 제거하지 않으려했습니다. 그래서 우리는 건물을 떠났지만 내부 방법으로 그 사용법을 제거했습니다. 우리가 이것을했을 때 갑자기 WSDL에서 속성이 사라지게되었지만 IIS6을 실행하는 서버에서만이 속성이 사라졌습니다. IIS 5.1을 실행하는 개발자는 여전히이 속성을 사용합니다.

우리는 (빈 문자열로 들어가서 설정하는) 메소드에 간단한 사용법을 다시 넣었습니다. 갑자기 IIS6 서버에서 다시 나타났습니다.

그게 뭐야?

답변

3

this problem I had과 조금 비슷합니다.

wsdl에 개인 설정 도구가 있으므로 속성이 없습니다.

+0

아마도, 내 경우에는 모두 공개 였지만, 수업은 오래 전에 썼다 .net 1. 무언가 그래서 {get; 설정;} 선언. 나는 이것이 당신의 문제와 관련이있을 것이라고 생각합니다. 그것이 있다면, 당신은 현상금을 아직받을 수 있습니다! – ryber

0

"public string EmployeeID;" 속성 선언이 아니라 필드 선언입니다. 정말로 wsdl 클래스가 생성되고 필드가 아닌 속성을 갖고 있습니까?

+0

공개 필드 인 경우 필드는 ryber

0

우연히 .NET 3.5가 설치되어 사라진 서버가 아직 보이지 않는 서버에 해당 버전이없는 서버가 있습니까? this question이 발생하는 것과 동일한 것인지 또는 필드/속성을 [Obsolete]으로 표시했는지 .NET (2.0 이상)이 직렬화하지 않는지 확실하지 않습니다.

0

내 생각 엔 당신이 컴파일러 최적화의 아름다운 부작용 중 하나보고있는 것입니다 :

  • 당신은 사용되지 않습니다 필드 수준의 선언을 가지고있다.
  • 컴파일러는 여러 패스 중 하나에서 이것을보고 "이봐, 아무도 이것을 사용하지 않는다"라고 말합니다.
  • 컴파일러는이 작은 최적화가 아무에게도 해를 끼치 지 않는 선언문을 제거합니다.
  • 나중에 WSDL이 생성 될 때 어셈블리가 반영되어 아무도 사용하지 않는 멋진 공용 변수가 누락되었습니다.

이제는 이론적으로 "릴리스 빌드"에서만 발생해야하지만 컴파일러가 명확한 대답을 내리기 위해 수행하는 다양한 최적화에 대해 충분히 알지 못합니다.

관련 문제