Веб-сервис WCF с функциональностью на основе URI/URL
У меня есть служба WCF, над которой я работаю, которая заменяет старый хостинг API CMS.
Для каждого клиентского сайта в старой системе / базе данных это работает так:
clientdomain.com извлекает свое содержимое (XML) из URL-адреса hostingdomain.com/clientdomain/api.xml (расширение.xml действительно является классической страницей ASP, которая экспортируется в виде XML на основе clientdomain)
Например: clientdomain.com/photos каналы с hostingdomain/clientdomain/photos/api.xml
И тот же файл api.xml используется для всех клиентских доменов, как в hostingdomain /clientdomain2/photos/api.xml и так далее.
Я предполагаю, что в настройке интерфейса, как:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "*clientdomain*/photos")]
//method
List<APIContentObject> GetPhotosBySiteID();
Можно / как изменить клиентский домен в URITemplate для подачи из списка / массива, полученного из базы данных?... или что-то в этом роде, чтобы он знал, что /client1/photos и /client2/photos доступны как UriTemplates? Или я что-то упустил?... У меня проблемы с этим целым URI/URL в WCF...
Я мог бы сделать это немного по-другому и использовать что-то вроде photos.clientdomain.com и добавить все домены в качестве заголовков узлов и...??.. что-то по этому маршруту? Что бы ни было наилучшей практикой и безопасностью в WCF и прочем джазе.
Цель этого состоит в том, чтобы в конечном итоге мобильные приложения и веб-сайт извлекли из этого WCF. (а также приложение администрирования push / pull, которое будет следовать)
Старая система использовала некоторую хитрость IIS и классические вещицы с ослами, которые довольно интересны, и кое-что я оставляю позади... Итак... есть идеи?
1 ответ
Шаблоны URL могут заполнять параметры в методах вашего операционного контракта. Что-то вроде следующего:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "{clientdomain}/photos")]
//method
List<APIContentObject> GetPhotos(string clientdomain)
{
//Look up clientdomain in DB and return the right thing
}