Служба RESTful WCF, которая может отвечать как в JSON (P), так и в XML и все еще использоваться в качестве веб-службы SOAP? - PullRequest
9 голосов
/ 03 марта 2009

С учетом контракта, такого как:

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

Есть ли способ заставить службу отвечать с помощью json при запросе как: /GetData/1234.json, xml при запросе как /GetData/1234.xml и по-прежнему быть доступным как правильный сервис мыла по какому-либо другому URL-адресу со строго типизированным контрактом wsdl?

Использование Stream в качестве возвращаемого значения для GetData невозможно, так как если бы он удовлетворял первым двум требованиям, wcf не может создать полную спецификацию wsdl, так как он не знает, каким будет содержимое результирующего потока.

1 Ответ

12 голосов
/ 03 марта 2009

Вы должны иметь два отдельных метода, которые принимают идентификатор и формат (и они будут вызывать общую реализацию, которая возвращает ResponseData), которые имеют различные атрибуты WebGet :

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

Для конечной точки SOAP вы должны иметь возможность вызывать любой из методов, но вам потребуется отдельный экземпляр ServiceHost, на котором размещается реализация контракта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...