Domanda

Nel mio servizio WCF ho metodo con 'int' parametro:

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

Quando ho creato riferimento WebService a questo servizio WCF la seguente firma è stata generata:

    [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]));
    }

Si può vedere che invece di un intero parametro ho 2:. Intero (per il valore) e bool (per il contrassegno 'se è stato specificato il valore)

E 'questo ok? Perché ho bisogno del 2 ° parametro (bool)?

Grazie mille!

È stato utile?

Soluzione

"campi specificati sono generati solo su parametri opzionali che sono le strutture. (Int, datetime, decimali ecc). A tutti questi variabili avranno variabile aggiuntiva generata con il nome specificato.

Dal momento che i campi "specificati" sono generati solo su parametri opzionali, se è stato inserito i parametri per il metodo PublishEnrollmentProfile all'interno di un DataContract e impostare l'attributo DataMember su methodID a [DataMember (IsRequired = true)] il campo specificato dovrebbe andare via, a meno che non si tratta di un campo facoltativo, nel qual caso si vorrebbe lasciare le cose come stanno.

Ecco un post di blog con alcuni campioni.

UPDATE

In modo da avere l'operazione contratto.

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

Se i parametri di tale metodo non sono opzionali allora si dovrebbe creare un DataContract e ridefinire i OperationContract in questo modo:

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

E poi avete il vostro DataContract come questo.

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


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

    .
    .
    .

} 

In modo da avere un oggetto "richiesta" che si passa al servizio WCF che ha campi siteName e methodId. Nell'esempio ho fornito methodId è ora richiesto, questo sarebbe elminate campo "specificato".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top