2010-02-28 4 views
0

J'ai un service avant droit comme:WCF DataContractSerializer ne sérialisation

[ServiceContract] 
public interface IService 
{ 
     [WebGet(UriTemplate = "/", ResponseFormat = WebMessageFormat.Xml)]   
     [OperationContract] 
     List<DataContracts.MyThing> Get(); 
} 

Mon DataContract est straightfoward, rien d'inhabituel là:

[DataContract] 
public class MyThing 
{ 
    [DataMember] 
    public string ID { get; set;} 
} 

J'utilise le WebServiceHostFactory au lieu de liaison manuelle.

Quand je lance ceci sur IIS 5.1 (Windows XP, mon environnement de dev local), je reçois un retour comme:

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

Cependant, quand je laisse tomber exactement le même code sur IIS 6.0 dans une zone de production , je reçois un retour comme:

<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> 

ma question est double:

  1. Pourquoi est-il ne sert pas les espaces de noms sur ma développem locale environnement?
  2. Pourquoi crée-t-il du code XML incorrect en ajoutant le chemin de base du service à l'intérieur de la balise?

De toute évidence, le mauvais nœud XML casse n'importe quel analyseur, ce qui est absolument inutile pour moi. Assez curieusement, cela se passe uniquement sur cette méthode de service particulière, tous les autres fonctionnent bien, et sont configurés de la même manière.

EDIT: Lorsque j'utilise JSON, tout semble bon, donc je ne pense pas que ce soit un problème avec WCF. Ce doit être un problème de sérialiseur.

+0

ressemble à une différence dans la version .NET Framework. –

+0

Oh, bon point, je cours en local 3.5SP1, laissez-moi vérifier le serveur. – FlySwat

+0

Il fonctionne également 3.5 SP1 :( – FlySwat

Répondre

0

La première sortie sérialisée (sans aucun attribut d'espace de noms XML) est la sortie que vous obtiendriez si vous utilisiez XmlSerializer au lieu de DataContractSerializer. Mon hypothèse est que XmlSerializer devient le sérialiseur de votre configuration IIS 5.1. La configuration est-elle différente entre vos paquets IIS 5.1 et IIS 6.0? Est-ce que l'un de vos contrats est différent? Pouvez-vous chercher "XmlSerializer" dans votre base de code et vos paramètres pour vous assurer que vous ne l'avez pas accidentellement ramassé quelque part? (Par exemple, vous pouvez avoir [XmlSerializerFormat] ou [XmlSerializerOperationBehavior] branché quelque part accidentellement.) WebServiceHostFactory peut également être paramétré différemment entre les implémentations IIS 5.1 et IIS 6.0 qui sont à l'origine du problème. Avec votre implémentation IIS 6.0, la sortie que vous obtenez est ce que vous obtiendriez si vous utilisiez DataContractSerializer. Si vous êtes OK avec la sortie IIS 5.1 mais pas OK avec la sortie IIS 6.0, vous pouvez décorer vos opérations ou votre service avec [XmlSerializerFormat] explicitement, de sorte que XmlSerializer soit toujours ramassé ....

Questions connexes