Минимальная конфигурация для RESTful WCF
-
02-07-2019 - |
Вопрос
Какой минимум мне нужно указать в web.config, чтобы WCF работал с REST?Я аннотировал свои методы с помощью [WebGet], но они не получили сообщение.
Решение
Я обнаружил, что вы можете добавить следующее в директиву ServiceHost в файле *.svc, и он автоматически настроит для вас WebHttpBinding и WebHttpBehavior:
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
Обратите внимание, что пространство имен немного отличается от того, что упоминается где-либо в Интернете (например, в эта статья MSDN).
После этого мне удалось удалить весь раздел из web.config, и все по-прежнему работало!
Другие советы
Убедитесь, что вы используете webHttpBinding на своей конечной точке (а не httpBinding или wsHttpBinding).Вот моя конфигурация конечной точки...
<endpoint address="" binding="webHttpBinding" bindingConfiguration=""
contract="WcfCore.ICustomer">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Вам необходимо убедиться, что у вас есть адрес хоста вашей службы, например
<services>
<service name="SomeLib.SomeService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/somebase"/>
</baseAddresses>
</host>
<!-- And one EndPoint **basicHttpBinding** WILL WORK !!! -->
<endpoint
address="basic"
binding="basicHttpBinding"
contract="SomeLib.SomeContract"/>
</service>
</services>
Итак, теперь, если вы самостоятельно размещаете хост через консольное приложение, например... вы можете вызвать свой хост через:
WebChannelFactory<IServiceContract> factory =
new WebChannelFactory<IServiceContract>(
new Uri("http://localhost:8080/somebase"));
Когда консольное приложение запустится, адрес будет доступен для просмотра, даже если он размещен самостоятельно, и вы сможете вызывать свои действия на основе шаблонов URI вашего веб-сайта.
Эта минимальная конфигурация позволит вам вызывать WCF RestFULLY через самостоятельный хостинг.Если вы размещаете хостинг в IIS, по сути, он будет работать так же, за исключением того, что файл svc заменяет наш собственный хост.