У меня есть следующая конфигурация XML
<system.serviceModel>
<services>
<service name="MyService.MyServiceREST" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="http://localhost:1234/MyService/xml"/>
</baseAddresses>
</host>
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="xmlBehavior" contract="MyService.IMyService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="xmlBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Я хочу реализовать в коде C# вместо того, чтобы использовать конфигурацию.
Я не могу выяснить, кто сделать EndPoint с webHttp для представления этого сервиса как сервис REST.
ServiceHost serviceHost = new ServiceHost(singletonInstance, "http://localhost:1234/MyService/xml");
// Create Meta Behavior
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(behavior);
Binding mexBinding = MetadataExchangeBindings.CreateMexHttpBinding();
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "mex");
WSHttpBinding httpBinding = new WSHttpBinding(SecurityMode.None);
serviceHost.AddServiceEndpoint(typeof(MyService.IMyService), httpBinding, "rest");
Как правило, при отдыхе с WCF вы можете либо использовать поведение
, включает в себя все необходимые настройки и биты и куски, чтобы сделать рабочую силу остальных - больше не требуется поведение WebHTTP.
в Config, либо можно использовать класс WebserviceHost
Вместо «простого ванили» ServiceShost
). Используя WebServiceHost WebserviceHost
Конечно, это означает, что вам нужен отдельный WebserviceHost
(в System.servicemodel.WEB
), который проводит услугу как отдохнуть исключительно. Это может быть или не может быть, что вы ищете:
WebServiceHost webServiceHost =
new WebServiceHost(singletonInstance, "http://localhost:1234/MyService/xml");
WebHttpBinding webBinding = new WebHttpBinding();
webServiceHost.AddServiceEndpoint(typeof(MyService.IMyService), webBinding, "rest");
Другой вариант, который у вас есть, это добавить конечную точку обслуживания на ваш регулярный хост обслуживания, и просто настройте поведение веб-сайта на этой конечной точке - Endpoint (и Service) поведение В конце концов, являются просто обычными классами .NET, которые вы можете создать и добавлять в соответствующую коллекцию
(на сервисе или на индивидуальную конечную точку):
WebHttpBinding restBinding = new WebHttpBinding();
ServiceEndpoint restSEP =
serviceHost.AddServiceEndpoint(typeof(MyService.IMyService),
restBinding, "rest");
restSEP.Behaviors.Add(new WebHttpBehavior());
Обе пути должны принести вам свою цель, Я надеюсь! (или, по крайней мере, получите ближе: -)