2010-08-04 9 views
5

Ich frage mich, wie ich einen Parameter einer OperationContract-Methode in WCF wie erforderlich angeben kann, so dass das generierte xsd minOccurs = "1" anstelle von minOccurs = "0" enthält.So geben Sie einen Parameter eines OperationContract nach Bedarf an

Beispiel:

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

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

Aber ich will minOccurs = "1" innerhalb des Codes, ohne die Notwendigkeit zu definieren, um sie manuell in die fix xsd-Datei.

+0

http: // Stackoverflow .com/fragen/1438623/how-can-i-force-wcf-autogenerate-wsdls-mit-erforderlichen-method-parameter-minoc/3436039 # 3436039 – Freelancer

+0

Siehe [hier] (http://stackoverflow.com/ Fragen/1438623/how-can-ich-force-wcf-zu-autogenerate-wsdls-mit-erforderlichen-Methode-Parameter-minocc/3436039 # 3436039) Ich dünn k dass es eine bessere Lösung ist. –

Antwort

7

Möglicherweise müssen Sie die Parameter in einer Klasse wickeln, dann können Sie das DataMember Attribut verwenden, und geben Sie 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

Dies ist nicht die Antwort, die ich zu lesen hoffte, aber ich danke Ihnen, um klarzustellen, wie es gemacht werden muss. –

+5

Wird das Argument 'request' im OperationContract nicht einfach als minOccurs = "0" im generierten xsd markiert? – arathorn

+0

@arathon Ich sehe, du hast hier nie eine Antwort erhalten. Du bringst einen starken Punkt hervor. Ich denke du hast Recht. Die Durchsetzung einer OperationContract-Parameter-Anforderung in WCF (so weit ich gelesen habe) kann nicht mit 'Nullable'-Typen durchgeführt werden, ohne einen Nachrichtenvertrag einzugeben. Hier ist ein Link, den ich gefunden habe: http://social.msdn.microsoft.com/Forums/vstudio/en-US/e707ed20-c09c-4e26-927a-7c3071d74ed7/operationcontract-with-required-parameters?forum=wcf .. Ich denke, Sie haben Recht. –

Verwandte Themen