Wie kann ich zwingen WCF automatisch generieren WSDLs mit den erforderlichen Verfahrensparameter (minOccurs = „1“)?

StackOverflow https://stackoverflow.com/questions/1438623

  •  08-07-2019
  •  | 
  •  

Frage

Bei der Verwendung von WCF und OperationContracts Ich habe die folgende Methode definiert:

    [OperationContract]
    [FaultContract(typeof(ValidationFault))]
    [FaultContract(typeof(FaultException<ExceptionDetail>))]
    int DoSomething(int someId, MyComplexType messageData);

Wenn hier ein WSDL durch die WCF-Laufzeit übersetzt wird, es endet mit mit minOccurs = „0“ aufgelistet für die Parameter someId und message (und anschließend wirft einen Laufzeitfehler, wenn diese Parameter fehlen).

Wenn ich generieren einen Proxy verwenden SoapUI ich etwas, das wie folgt aussieht:

  <com:DoSomething>
     <!--Optional-->
     <com:EventId>1</com:EventId>
     <!--Optional-->
     <com:myComplexType >
        <com:id>1</com:id>
     </com:myComplexType >
  </com:DoSomething>

Das ID-Feld in MyComplexType mit DataMemeber Attribute markiert mit IsRequired = "true" und somit als zwingend ausgesetzt.

Es ist offensichtlich ziemlich irreführend für die WSDL festlegen, dass ein Parameter optional ist, wenn dies nicht der Fall, aber ich kann keine offensichtliche Möglichkeit finden Sie in der Operation Markup WCF zu zwingen, um diese Parameter zu erkennen und setzen nach Bedarf.

Ich bin etwas verwirrt es keine offensichtliche Art und Weise scheint diese (Lese Intellisense / msdn / google) zu tun. Oder ich werde blind und mit Blick auf etwas offensichtlich.

Irgendwelche Hinweise?

War es hilfreich?

Lösung

Ich habe geschrieben eine Blog Post zu diesem Thema, wie ich in das Problem selbst letzte Woche lief. Es wird erläutert, wie Sie die Metadaten ändern können, die WCF zur Laufzeit erzeugt.

Neben der Quelldatei herunterzuladen, müssen Sie nur ein Attribut zu Ihrem Vertrag Definition hinzuzufügen. Wie so:

[ServiceContract]
[RequiredParametersBehavior]
public interface ICalculatorService
{
    [OperationContract]
    int Add(int firstValue, int secondValue);
}

Hier ist die Blog-Post, die es näher erklärt: Controlling WSDL minOccurs mit WCF

Andere Tipps

Überprüfen Sie, ob MyComplexType mit einem markiert [Datacontract] Attribut.

Für meinen eigenen WCF Vertrag, fand ich, dass minOccurs = 1 würden für IsRequired nicht angezeigt = in der generierten Wsdl wahr, bis die gesamte Kette von Objekten im Vertrag verwickelt waren als solche gekennzeichnet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top