WCF REST-сервис: прохождение кода страны - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть REST-сервис WCF, который используется мобильным приложением в разных странах. Он принимает и возвращает JSON, и я использую StructureMap.

Идея состоит в том, чтобы создать один экземпляр службы для всех стран, но мне нужно знать, в какой стране вызывается служба, и определиться с этим в службе (например, определить строку подключения, которая будет использоваться). *

однако я хочу, чтобы код страны не передавался при каждом запросе на обслуживание. Какие у меня есть варианты?

Могу ли я, например, иметь одну конечную точку для каждой страны? Но как в таком случае узнать, какой код конечной точки / страны использовался для вызова службы?

Может быть, другие возможности?

1 Ответ

2 голосов
/ 29 ноября 2011

Несколько конечных точек могут быть решением, но вам нужен надежный способ определить, какая конечная точка фактически использовалась.Учитывая «отключенную» природу служб REST WCF (под этим я подразумеваю использование не-WCF-типов для связи и просто использование атрибутов WCF), для этого потребуется написать WebHostFactory, в которой указывается страна, в которой создается службадля данной конечной точки.Что вы можете сделать, так это проверить экземпляр WebOperationCurrent.Current, чтобы получить доступ к информации, скрытой от сигнатуры вашего метода.Например:

Uri requestRoot = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri;
if (requestRoot.PathAndQuery.Contains("en-us")) {
    // use english locale
}
else if (requestRoot.PathAndQuery.Contains("de-de")) {
    // use german locale
}

Вам потребуется более эффективная стратегия для определения фактической страны / языка, но основная идея состоит в том, чтобы повторно разместить один и тот же сервис под несколькими путями и проверить эти пути в запросе, используятекущий WebOperationContext экземпляр.

Редактировать Из вышеупомянутых комментариев я хотел бы добавить, что у вас есть доступ к строке UserAgent для текущего запроса с использованием WebOperationContext.Таким образом, вы также можете проверить эту информацию в поисках подсказки о запрашиваемом языке.Но имейте в виду, что эта «неявная» информация является лишь ключом, но никогда не дает четких указаний на то, что хочет пользователь.

...