Frage

In meinem WCF-Dienst Ich habe Methode mit 'int' Parametern:

    [OperationContract]
    PublishResult PublishEnrollmentProfile(
        string siteName, int methodId,...
        );

Als ich WebService Verweis auf diesen WCF-Dienst erstellt wurde die folgende Signatur erzeugt:

    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("...",
        RequestNamespace="...", ResponseNamespace="...",
        Use=System.Web.Services.Description.SoapBindingUse.Literal,
        ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    [return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
    public PublishResult PublishEnrollmentProfile(
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
        string siteName,
        int methodId,
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        bool methodIdSpecified, ...)
    {
        object[] results = this.Invoke("PublishEnrollmentProfile", new object[] {
                    siteName,
                    deployServerName,
                    methodId,
                    methodIdSpecified,
                    deviceClass,
                    deviceName,
                    registrationCode});
        return ((PublishResult)(results[0]));
    }

Sie können diese anstelle einer ganzen Zahl siehe Parameter I 2 haben. Integer (für Wert) und Bool (für Marke ‚, wenn der Wert angegeben wurde)

Ist das ok? Warum muss ich den zweiten Parameter (bool)?

Vielen Dank!

War es hilfreich?

Lösung

angegeben“Felder werden nur auf optionale Parameter generiert, die Strukturen sind. (Int, Datetime, dezimal usw.). Alle diese Variablen zusätzliche Variable mit dem angegebenen Namen erzeugt haben.

Da die „festgelegte“ Felder nur auf optionale Parameter erzeugt werden, wenn Sie die Parameter für die PublishEnrollmentProfile Methode innerhalb eines Datacontract platziert und die Datamember-Attribut auf methodId auf [Datamember (IsRequired = true)] das angegebene Feld sollte festgelegt gehen weg, es sei denn, dies ist ein optionales Feld, in dem Fall, dass Sie es verlassen wollen würden, wie es ist.

Hier ist ein Blog-Posting mit einigen Proben.

UPDATE

So haben Sie Ihren Betrieb Vertrag.

[OperationContract]
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...);

Wenn die Parameter dieser Methode nicht optional sind, dann sollten Sie eine Datacontract erstellen und definieren die Operation etwa so:

{
   [OperationContract]
   PublishResult PublishEnrollmentProfile(PublishEnrollmentProfileRequest request);
}

Und dann haben Sie Ihre Datacontract so.

[DataContract]
public class PublishEnrollmentProfileRequest
{
    private string _siteName;
    [DataMember]
    public string siteName
    {
       get;
       set;
    }


    private int _methodId;
    [DataMember(IsRequired=True)]
    public int methodId
    {
       get;
       set;
    }

    .
    .
    .

} 

So haben Sie eine „Anfrage“ zum Gegenstand haben, dass Sie in den WCF-Dienst übergeben, welche Felder site und methodId hat. In dem gegebenen Beispiel ich jetzt methodId erforderlich ist, würde dies die „festgelegte“ Feld elminate.

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