2010-02-28 2 views
0

내가 정직 서비스 등을 직렬화하는 데 실패합니다. 나는 IIS 5.1에서이 프로그램을 실행할 때WCF DataContractSerializer는

는 (윈도우 XP, 내 로컬 dev에 환경), 내가 좋아하는 반환받을 : 그러나

<ArrayOfMyThing> 
    <MyThing></MyThing> 
</ArrayOfMyThing> 

를, 내가 생산 상자에 IIS 6.0에서 동일한 코드를 삭제할 때

<ArrayOfMyThing 
    xmlns="http://schemas.datacontract.org/2004/07/My.NameSpace.DataContracts" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"http://my.website.com/services/> 
</ArrayOfMyThing> 

그래서 제 질문은 두 가지이다 :, 내가 좋아하는 수익을 얻을 내 로컬 developm에

  1. 왜이 제공되지 않은 네임 스페이스 환경?
  2. 태그 안의 서비스에 기본 경로를 추가하여 잘못된 XML을 만드는 이유는 무엇입니까?

분명히 나쁜 XML 노드가 파서를 깨뜨 렸기 때문에 이것은 나에게 전혀 도움이되지 않습니다. 이상하게도 이것은 특정 서비스 방법에서만 발생하며 다른 모든 서비스 방법은 정상적으로 작동하며 같은 방식으로 구성됩니다.

편집 : JSON을 사용할 때 모든 것이 잘 보입니다. 따라서 WCF의 문제는 아닙니다. 그것은 serializer 문제가되어야합니다.

+0

This .NET Framework 버전의 차이점처럼 보입니다. –

+0

아, 좋은 지적입니다. 3.5SP1을 로컬에서 실행 중이므로 서버를 점검하겠습니다. – FlySwat

+0

3.5 SP1을 실행 중입니다. – FlySwat

답변

0

XML 네임 스페이스 특성이없는 첫 번째 직렬화 된 출력은 DataContractSerializer 대신 XmlSerializer를 사용하면 얻을 수있는 출력입니다. 제 가정은 XmlSerializer가 IIS 5.1 구성에서 선택한 serializer로 선택된다는 것입니다. IIS 5.1 패키지와 IIS 6.0 패키지간에 구성이 다른가요? 당신의 계약 중 다른 계약이 있습니까? 전체 코드베이스 및 설정에서 "XmlSerializer"를 검색하여 실수로 어딘가에 있지 않도록 할 수 있습니까? 예를 들어 [XmlSerializerFormat] 또는 [XmlSerializerOperationBehavior]를 실수로 어딘가에 끼워 넣었을 수 있습니다. 문제를 일으키는 IIS 5.1 구현과 IIS 6.0 구현간에 다른 WebServiceHostFactory에 대한 설정이있을 수 있습니다.

IIS 6.0 구현을 통해 얻게되는 결과는 DataContractSerializer를 사용하는 경우 얻을 수있는 결과입니다. IIS 5.1 출력에서는 OK이지만 IIS 6.0 출력에서는 OK가 아니라면 XmlSerializer가 항상 선택되도록 [XmlSerializerFormat]을 사용하여 작업이나 서비스를 명시 적으로 꾸미십시오.