2009-10-20 8 views
0

J'ai ce problème. Je WCF .Net C# service web avec cette méthode:Comment sérialiser les paramètres dans la méthode Service Web

public interface IMyService 
{ 
    // TODO: Add your service operations here 
    [OperationContract] 
    ListOfRequests GetListOfRequests(string par1, 
            string par2, 
            string par3, 
            DateTime par4, 
            DateTime par5, 
            string par6, 
            string par7); 
} 
public class MyService : IMyService 
{ 
    public ListOfRequests GetListOfRequests(string par1, 
           string par2, 
           string par3, 
           DateTime par4, 
           DateTime par5, 
           string par6, 
           string par7) 
    { 
      // .... web method code here; 
    } 
} 

Le problème est que lorsque je produis le service web le retour du schéma wsdl ceci:

<xs:element name="GetListOfRequests"> 
    <xs:complexType> 
    <xs:sequence> 
    <xs:element minOccurs="0" name="par1" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par2" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par3" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par4" type="xs:dateTime" /> 
    <xs:element minOccurs="0" name="par5" type="xs:dateTime" /> 
    <xs:element minOccurs="0" name="par6" nillable="true" type="xs:string" /> 
    <xs:element minOccurs="0" name="par7" nillable="true" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

et je veux que mes paramètres soient pas null comme ceci:

<xs:element name="GetListOfRequests"> 
    <xs:complexType> 
    <xs:sequence> 
    <xs:element minOccurs="1" name="par1" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="1" name="par2" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="1" name="par3" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="1" name="par4" type="xs:dateTime" /> 
    <xs:element minOccurs="1" name="par5" type="xs:dateTime" /> 
    <xs:element minOccurs="1" name="par6" nillable="false" type="xs:string" /> 
    <xs:element minOccurs="0" name="par7" nillable="true" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

Comment puis-je serizalize paramètres pour y parvenir? Merci d'avance pour votre aide. Cordialement, Georgi

Répondre

0

Vous pouvez supprimer

nillable="true" 

avec

[DataContract] 
public class ListOfRequests 
{ 
    DataMember(EmitDefaultValue=false)] 
    public string ListOfRequestsMember; 
    // ... 
} 

Le problème ici est que la valeur par défaut de type chaîne est nulle. Donc, configurer cette propriété sur false vous omettez les données quand il est réglé à sa valeur par défaut

Dans le .NET Framework, les types ont un concept de valeurs par défaut. Pour exemple, pour une référence de type de la valeur par défaut est nul, et pour un type entier il est égal à 0. Il est parfois souhaitable d'omettre une donnée élément à partir des données sérialisées lorsque il est réglé à sa valeur par défaut. Pour cela, définissez la propriété EmitDefaultValue sur false (true par par défaut).

ref

+0

Salut, même résultat. Peut-être que je dois expliquer mon application avec plus de détails. Je définis la classe avec struct. Struct a 10 éléments. Mon service Web renvoie l'objet de cette classe qui est ma méthode. La méthode obtient 7 paramètres les passer à la procédure dans ma base de données. Cette procédure renvoie l'ensemble de données qui donne leurs valeurs aux 11 éléments. Donc les membres de cette classe sont ces 11 éléments ("packed") en structure que je peux facilement seariliser. Le problème est que je ne peux pas sérialiser les paramètres renvoyés par ma méthode (qui renvoie l'objet de cette classe). Les 11 éléments et les 8 paramètres sont dans deux schémas diff xsd. – Georgi

+0

Comme je l'ai dit, cela n'a pas résolu mon problème. – Georgi

Questions connexes