Ответ 1
Как правило, при выполнении REST с WCF вы можете использовать поведение <webHttp>
в config, или вы можете использовать класс WebServiceHost
(вместо "plain vanilla" ServiceHost
). Использование WebServiceHost
включает в себя все необходимые настройки и биты и фрагменты, чтобы сделать работу REST - больше не требуется поведение webHttp.
Конечно, это означает, что вам нужен отдельный WebServiceHost
(в System.ServiceModel.Web
), который использует только службу REST. Это может быть или не быть тем, что вы ищете:
WebServiceHost webServiceHost =
new WebServiceHost(singletonInstance, "http://localhost:1234/MyService/xml");
WebHttpBinding webBinding = new WebHttpBinding();
webServiceHost.AddServiceEndpoint(typeof(MyService.IMyService), webBinding, "rest");
Другим вариантом, который у вас есть, является добавление конечной точки службы на ваш обычный хост службы и просто настройка поведения веб-http в этой конечной точке - поведение конечной точки (и службы) - это просто обычные классы .NET, в конце концов, которые вы можете создать экземпляр и добавить в соответствующую коллекцию Behaviors
(в службе или отдельной конечной точке):
WebHttpBinding restBinding = new WebHttpBinding();
ServiceEndpoint restSEP =
serviceHost.AddServiceEndpoint(typeof(MyService.IMyService),
restBinding, "rest");
restSEP.Behaviors.Add(new WebHttpBehavior());
Оба пути должны привести вас к вашей цели, я надеюсь! (или, по крайней мере, приблизиться: -)