Вы можете выставить услугу в двух разных конечных точках.
SOAP можно использовать привязку, которая поддерживает SOAP, например, basicHttpBinding, RESTful можно использовать webHttpBinding. Я предполагаю, что ваша служба REST будет в JSON, в этом случае вам нужно настроить две конечные точки со следующей конфигурацией поведения
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
Пример конфигурации конечной точки в вашем сценарии:
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" contract="ITestService"/>
</service>
</services>
так, услуга будет доступна на
Примените [WebGet] к договору операции, чтобы сделать его RESTful.
например,
public interface ITestService
{
[OperationContract]
[WebGet]
string HelloWorld(string text)
}
Обратите внимание: если служба REST отсутствует в JSON, параметры операций не могут содержать сложный тип.
Ответ на сообщение для SOAP и RESTful POX (XML)
Для простого старого XML в качестве возвращаемого формата это пример, который будет работать как для SOAP, так и для XML.
[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
[OperationContract]
[WebGet(UriTemplate = "accounts/{id}")]
Account[] GetAccount(string id);
}
Поведение POX для REST Обычный старый XML
<behavior name="poxBehavior">
<webHttp/>
</behavior>
Endpoints
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
</services>
Услуга будет доступна на
запрос REST
попробуйте в браузере,
http://www.example.com/xml/accounts/A123
SOAP-запрос
конфигурация клиентской конечной точки для службы SOAP после добавления ссылки на службу,
<client>
<endpoint address="http://www.example.com/soap" binding="basicHttpBinding"
contract="ITestService" name="BasicHttpBinding_ITestService" />
</client>
в C #
TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");
Другой способ сделать это - выставить два разных сервисных контракта и каждый со своей конфигурацией. Это может привести к появлению дубликатов на уровне кода, однако в конце дня вы захотите заставить его работать.