2009-03-03 13 views
9

dado un contrato como:¿Servicio RESTful WCF que puede responder tanto en JSON (P) como en XML y todavía se puede usar como servicio web SOAP?

[ServiceContract] public interface IService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "GetData/{id}.{format}")] 
    ResponseData GetData(string id, string format); 
} 

¿Hay una manera de conseguir el servicio para responder con JSON cuando se solicita como: /GetData/1234.json, xml cuando se le solicite y como /GetData/1234.xml seguir estando disponible como un servicio de jabón adecuado en alguna otra url, con un contrato wsdl fuertemente tipado?

Al usar Stream como el valor de retorno de GetData no es realizable, como si cumpliera con los dos primeros requisitos, wcf no puede crear una especificación wsdl completa ya que no tiene idea de cuál será el contenido de la Stream resultante.

+0

Ver [WCF RESTful POX, JSON y SOAP Coexist] (http://www.codemeit.com/wcf/wcf-restful-pox-json-and-soap-coexist.html) por [codemeit] (http: //stackoverflow.com/users/11413/codemeit). –

Respuesta

12

Usted debe tenga dos métodos para que tomen Identificación y formato (y que llamarían una aplicación compartida que devuelve ResponseData) que tienen diferentes WebGet attributes:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "GetData/{id}.{format}.xml", 
     ResponseFormat=WebMessageFormat.Xml)] 
    ResponseData GetDataXml(string id, string format); 

    [OperationContract] 
    [WebGet(UriTemplate = "GetData/{id}.{format}.json", 
     ResponseFormat=WebMessageFormat.Json)] 
    ResponseData GetDataJson(string id, string format); 
} 

Para el extremo SOAP, que debe ser capaz para llamar a cualquiera de los dos métodos, pero tendrá que tener una instancia de ServiceHost separada que hospede la implementación del contrato.

Cuestiones relacionadas