2013-01-03 3 views
0

Je suis en train de mettre en œuvre une opération de service WCF/Soap et j'ai défini plusieurs membres du contrat de données comme non requis (IsRequired = false).C# .Net Comment déterminer si la valeur DataMember nullable a été fournie

Ma question porte sur les deux scénarios suivants ...

  • Le client fournit une valeur nulle pour l'élément de contrat (i: nil = "true")
  • Le client ne fournit pas l'option élément (ie ils m'envoient un contrat partiel)

Ce problème est significatif pour les types primitifs complexes et nullables. De ce que je peux déterminer, le sérialiseur .Net renvoie null dans les deux scénarios, donc ma question est, quelqu'un peut-il recommander un moyen de déterminer si un paramètre facultatif a été fourni dans la demande SOAP?

Répondre

0

Une solution de contournement consiste à ajouter des membres de type MemberSupplied dans votre contrat de données. E.g .:

[DataContract] 
public class EmployeeSearchParams 
{ 
    [DataMember] 
    public Employee Manager {get; set;} 

    [DataMember] 
    public bool ManagerSupplied {get; set;} 
} 
+0

Merci pour la solution de contournement, j'ai effectivement vu cela suggéré sur un autre thread relatif à un problème différent. Je pourrais utiliser cette approche si nécessaire, mais je préfère l'éviter si possible car c'est un peu maladroit. Je suis réticent à changer mon contrat pour surmonter le problème si je peux l'éviter. Parler à un collègue hier, Java a une solution plus propre au problème par lequel le sérialiseur fournit l'objet désérialisé avec un wrapper pour la demande brute qui fournit des propriétés pour déterminer si un élément facultatif a été fourni. – Jonna

+0

@Jonna c'était mon sentiment initial à propos de cette approche aussi, mais bien que j'appelle cela un _workaround_, je suis venu à accepter cela comme la solution _cleaner_. À mon avis, il devient beaucoup plus compliqué de gérer le SOAP brut côté serveur. Considérez également le côté client. Si c'est un client WCF direct, le client n'aura aucun moyen de choisir si envoyer null ou omettre le membre sur une base appel-par-appel. –

Questions connexes