none
¿Porque al crear el cliente para consumir mi WCF WebService me cambia la firma del metodo que quiero usar? RRS feed

  • Pregunta

  • Hola. Estoy aprendiendo WCF.

    Hice un WebService con un metodo que tiene la siguiente firma:

    void receivePositionReport(string AccountId, decimal MtId, decimal PollId, decimal MapLatitude, decimal MapLongitude, decimal Age, DateTime PollTimeStamp);

    pero al crear mi Cliente para utilizar el web service, me aparece con la siguiente firma

    void receivePositionReport(string AccountId, decimal MtId, bool MtIdSpecified, decimal PollId, bool PollIdSpecified, decimal MapLatitude, bool MapLatitudeSpecified, decimal MapLongitude, bool MapLongitudeSpecified, decimal Age, bool AgeSpecified, DateTime PollTimeStamp, bool PollTimeStampSpecified);

    Es decir, me cambia la cantidad de valores que debo pasar al web service y agrega un valor boleano para cada valor.

    Gracias.

    jueves, 28 de junio de 2012 16:52

Respuestas

  • Si tu webservice en su definición indica que los argumentos, propiedades, etc son minocurs=0 pero no indica que son nillable=true para los tipos nulos entonces es cuando el svcutil de .net al generarte el cliente te declara dos propiedades una la del tipo básico(bool, short, int, ...) y otro de tipo booleano que son los specified indicando si es nulo o no. Por lo tanto, tu wdsl debería de tener los nillables a true para evitar los especified. Y la manera de corregirlo es con IsRequired=true. 
    • Marcado como respuesta Perdido09 lunes, 23 de julio de 2012 14:21
    domingo, 22 de julio de 2012 16:16

Todas las respuestas

  • hola

    http://social.msdn.microsoft.com/Forums/da-DK/wcf/thread/a1bca402-cbe1-4233-8eb3-ce01b8cefcd4

    una duda, los parametros del contrato sond el tipo int, decimal, o son del tipo int? y decimal?

    porque el xxSpecified aparece para indicar si se especifica ese parametro, pero me sonaria logico que lo hiciera si se definio como nullable

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 30 de junio de 2012 12:02
  • Hola.

    los parametros son de tipo int y decimal. Agregue la etiqueta IsRequired=true de la siguiente manera en mi DataContract, pero sigue igual.

    [DataMember(IsRequired=true)]
            public decimal theExternalId;
            [DataMember(IsRequired = true)]
            public string theAccountId;
            [DataMember(IsRequired = true)]
            public decimal theMtId;
            [DataMember(IsRequired = true)]
            public decimal thePollId;
            [DataMember(IsRequired = true)]
            public decimal theMapLatitude;
            [DataMember(IsRequired = true)]
            public decimal theMapLongitude;
            [DataMember(IsRequired = true)]
            public decimal theAge;
            [DataMember(IsRequired = true)]
            public DateTime thePollTimeStamp;

    martes, 3 de julio de 2012 22:37
  • Si tu webservice en su definición indica que los argumentos, propiedades, etc son minocurs=0 pero no indica que son nillable=true para los tipos nulos entonces es cuando el svcutil de .net al generarte el cliente te declara dos propiedades una la del tipo básico(bool, short, int, ...) y otro de tipo booleano que son los specified indicando si es nulo o no. Por lo tanto, tu wdsl debería de tener los nillables a true para evitar los especified. Y la manera de corregirlo es con IsRequired=true. 
    • Marcado como respuesta Perdido09 lunes, 23 de julio de 2012 14:21
    domingo, 22 de julio de 2012 16:16