Pregunta

En mi servicio WCF tengo método con el 'int' parámetro:

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

Cuando creé referencia WebService a este servicio WCF la siguiente firma se generó:

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

Se puede ver que en lugar de un solo parámetro entero Tengo 2:. Entero (por valor) y bool (por marca 'si no se especifica valor)

Es esto aceptable? ¿Por qué necesito el segundo parámetro (bool)?

Muchas gracias!

¿Fue útil?

Solución

especificado" campos se generan únicamente en parámetros opcionales que son estructuras. (Int, fecha y hora, etc. decimal). Todas estas variables tendrán variable adicional generado con el nombre especificado.

Desde los campos "especificadas" sólo se generan sobre parámetros opcionales, si coloca los parámetros para el método en el interior PublishEnrollmentProfile de un DataContract y establece el atributo DataMember el ID de método de [DataMember (isRequired = true)] el campo especificado debe ir de distancia, a menos que este es un campo opcional en cuyo caso usted quiere dejar las cosas como son.

Aquí hay una entrada de blog con algunas muestras.

Actualizar

Por lo que tiene su operación Contrato.

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

Si los parámetros de ese método no son opcionales, entonces debería crear un DataContract y redefinir el OperationContract este modo:

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

Y entonces usted tiene su DataContract como este.

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


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

    .
    .
    .

} 

Así que hay una "petición" objeto que se pasa en el servicio WCF que tiene campos siteName y ID de método. En el ejemplo que he proporcionado ID de método que se requiere ahora, esto elminate el campo "especificada".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top