我有一个WCF REST服务,由不同国家/地区使用的移动应用程序使用。它接受并返回JSON,我使用StructureMap。
我们的想法是为所有国家/地区创建一个服务实例,但我需要知道哪个国家/地区正在调用该服务,并在服务中对其进行一些逻辑处理(例如,确定要使用的连接字符串)。
但是,我想避免必须与每个服务请求一起传递国家/地区代码。我有什么选择?
例如,我可以为每个国家/地区设置一个端点吗?但在这种情况下,我如何知道用于调用服务的端点/国家/地区代码?
也许其他可能性?
答案 0 :(得分:2)
多个端点可能是一种解决方案,但您需要一种可靠的方法来确定实际使用的端点。鉴于WCF REST服务的“断开连接”性质(我的意思是使用非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
实例检查请求中的那些路径。 / p>
修改强>
从上面的评论中,我想补充一点,您可以使用UserAgent
访问当前请求的WebOperationContext
字符串。因此,您还可以检查这些信息,以查找有关所请求语言的线索。但请记住,这些“隐含”信息只是线索,但从未明确表明用户想要什么。