Конечные точки REST / SOAP для службы WCF
Вы можете предоставить службу в двух разных конечных точках.в 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>
поэтому услуга будет доступна по номеру
http://www.example.com/soap http://www.example.com/json Примените [WebGet] к договору на эксплуатацию, чтобы сделать его RESTful.например,
открытый интерфейс ITestService {[OperationContract] [WebGet] string HelloWorld (string text)}
Обратите внимание, что если служба REST отсутствует в JSON, параметры операций не могут содержать сложный тип,Для простого старого 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>
Конечные точки
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
</services>
Услуга будет доступна в
http://www.example.com/soap http://www.example.com/xmlЗапрос 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" />
в C #
TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");
Еще один способ сделать это - выставить два разных сервисных контракта и каждый с определенной конфигурацией.Это может генерировать дубликаты на уровне кода, однако в конце дня вы хотите, чтобы он работал.