2009-05-05 10 views
10

En la interfaz necesaria para implementar un servicio WCF, declaro la clase principal con el atributo [ServiceContract()] y cualquier método expuesto con [OperationContract()].¿Los servicios de WCF exponen propiedades?

¿Cómo puedo exponer propiedades públicas? Gracias

Respuesta

12

No se puede. Así no es cómo funciona. Métodos solamente

+1

De hecho. Solo para expandir (sin la necesidad de otra respuesta), es una pila RPC, no una pila remota. Si desea propiedades, devuelva un objeto de un método y observe las propiedades del objeto en el cliente. –

+5

Estoy de acuerdo con Marc, pero aclare: no es WCF esa es la pila de RPC; son los estándares SOAP + WSDL que son. Todo lo que pueden describir es operaciones, enviadas en un mensaje. Ni siquiera existe el concepto de instancia, entonces, ¿de qué obtendría propiedades _desde_? –

4

Las propiedades son un aspecto orientado a objetos de las interfaces de componentes. WCF es sobre servicios, donde debe pensar y diseñar la secuencia de interacciones entre sus componentes.

La orientación a objetos no se adapta bien a escenarios distribuidos (donde el código se ejecuta en varios servidores o incluso en procesos múltiples) debido al costo de viajes de ida y vuelta, administración de estado potencialmente costosa y desafíos de control de versiones. Sin embargo, OO sigue siendo una buena forma de diseñar las partes internas de los servicios, especialmente si son complejas.

18

Dado que la parte obtener de una propiedad es un método, esto funcionará técnicamente, pero, como se mencionó en las respuestas/comentarios anteriores, esto puede no ser aconsejable; simplemente publicarlo aquí para el conocimiento general.

contrato de servicios:

[ServiceContract] 
public interface IService1 
{ 
    string Name 
    { 
     [OperationContract] 
     get; 
    } 
} 

Servicio:

public class Service1 : IService1 
{ 
    public string Name 
    { 
     get { return "Steve"; } 
    } 
} 

acceder desde su código de cliente:

var client = new Service1Client(); 
var name = client.get_Name(); 
4

Puede exponer propiedades, pero deberá usar el atributo [DataContract] y declarar la propiedad como atributo [DataMember] para las propiedades.

+0

esto funcionó para mí. GRACIAS –

2

POR FAVOR, NO exponga Propiedades como un método web. Esto no funcionará en HTTPS. Tuve un GRAN momento para identificar y solucionar este problema. La mejor manera es escribir un método concreto para regresar en WCF.

Cuestiones relacionadas