Además de otras respuestas, intentaré agregar lo que sé sobre este tema. En resumen, ambos sobrescriben el nombre y el espacio de nombre predeterminados de [DataContract] y [DataMember] (Name) con lo que proporcione a estas propiedades. De acuerdo con la documentación de la MS para la propiedad DataContractAttribute.Namespace (se llaman propiedades del atributo, no atributo), en la sección 'Sugerencia' indica link, "Para que los datos se transmitan con éxito, el nombre de los datos en un contrato de datos debe ser el mismo tanto en el cliente como en el servidor. Los proyectos de Visual Basic, de forma predeterminada, agregan un prefijo al espacio de nombre definido en cada archivo (llamado "espacio de nombres raíz", nombrado después del proyecto). Agregar este prefijo hace que los espacios de nombres del cliente y del servidor sean diferentes para el mismo tipo. La solución es establecer la propiedad del Espacio de nombres en "", o establecer explícitamente el espacio de nombres del contrato de datos en esta propiedad. " Según lo que he entendido, para que el atributo DataContract pueda serializar/deserializar los datos, los datos deben tener un espacio de nombres coincidente tanto en el cliente como en el servidor, lo que podría no ser el caso en una situación real. Por ejemplo, sus datos en el lado del servidor, si se nombran de una manera legible y sensible, pueden estar bajo el espacio de nombres que tiene un nombre algo así como "NameOfTheSolution.Server.NameOfTheProject", mientras que en el lado del cliente, podría ser algo así como " NameOfTheSolution.Client.NameOfTheProject ". Debido al espacio de nombres diferente en el que están los DataContracts, el atributo [DataContract] no podrá serializar/deserializar los datos entre el cliente y el servidor. No estoy seguro, pero esta podría ser la razón por la que dicho método no está permitido en su caso, debido a un espacio de nombres no coincidentes. En una situación en la que los espacios de nombres no coinciden, la propiedad 'Espacio de nombres' podría usarse mientras se usa el atributo [DataContract] y proporcionar la clase en ambos lados (cliente/servidor) con el mismo espacio de nombres, aunque físicamente estén en espacios de nombres diferentes.
[DataContract (Namespace = “Whatever you want, usually uri”)]
public class User
{}
En cuanto a la propiedad ‘Nombre’ del atributo [DataContract] va, que prevalece sobre el nombre de su DataContract con el nombre que proporcione a esta propiedad. Un uso de esto, en el contexto del atributo DataMember es sobrecargar un método dentro de un contrato de datos. Un DataContract no permite dos DataMember con el mismo nombre, por lo que en ese escenario, la propiedad 'Name' es útil.
Pero, ¿cómo funciona? Quiero decir, ¿por qué dice que el método no está permitido cuando el espacio de nombres es http://tempuri.org/User en lugar de User? – Xaisoft