2010-08-04 7 views
5

Je me demande comment je peux spécifier un paramètre d'une méthode OperationContract dans WCF comme requis pour que xsd généré contienne minOccurs = "1" au lieu de minOccurs = "0".Comment spécifier un paramètre d'un OperationContract tel que requis

Exemple:

[ServiceContract(Namespace = "http://myUrl.com")] 
public interface IMyWebService 
{ 
    [OperationContract] 
    string DoSomething(string param1, string param2, string param3); 
} 

génère cette xsd:

<xs:element name="DoSomething"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="param1" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param2" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="param3" nillable="true" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 

Mais je veux définir minOccurs = "1" dans le code sans qu'il soit nécessaire de fixer manuellement dans la fichier xsd.

+0

http: // stackoverflow .com/questions/1438623/comment-je-force-wcf-pour-autogenerate-wsdls-avec-required-method-parameters-minoc/3436039 # 3436039 – Freelancer

+0

Voir [ici] (http://stackoverflow.com/ questions/1438623/comment-je-force-wcf-pour-autogenerate-wsdls-avec-required-method-parameters-minocc/3436039 # 3436039) k que c'est une meilleure solution. –

Répondre

7

Vous pourriez avoir besoin pour envelopper vos paramètres dans une classe, vous pouvez utiliser l'attribut DataMember et spécifiez IsRequired=true:

[ServiceContract(Namespace = "http://myUrl.com")] 
public interface IMyWebService 
{ 
    [OperationContract] 
    string DoSomething(RequestMessage request); 
} 

[DataContract] 
public class RequestMessage 
{ 
    [DataMember(IsRequired = true)] 
    public string param1 { get; set; } 

    [DataMember(IsRequired = true)] 
    public string param3 { get; set; } 

    [DataMember(IsRequired = true)] 
    public string param3 { get; set; } 
} 
+0

Ce n'est pas la réponse que j'espérais lire, mais merci de préciser comment cela doit être fait. –

+5

Est-ce que cela ne fera pas que l'argument 'request' dans le OperationContract marqué minOccurs = "0" dans le xsd généré? – arathorn

+0

@arathorn Je vois que vous n'avez jamais reçu de réponse ici. Vous soulevez un point fort. Je pense que vous avez raison. L'application d'une exigence de paramètre OperationContract dans WCF (pour autant que j'ai lu) ne peut pas être faite sur les types 'Nullable' sans entrer le contrat de message. Voici un lien que j'ai trouvé: http://social.msdn.microsoft.com/Forums/vstudio/en-US/e707ed20-c09c-4e26-927a-7c3071d74ed7/operationcontract-with-required-parameters?forum=wcf Je pense que vous avez raison sur votre point. –

Questions connexes