我有一个WCF REST服务,供不同国家使用的移动应用程序使用。它接受并返回JSON,并使用StructureMap。WCF REST服务:通过国家代码
这个想法是为所有国家创建一个服务实例,但我需要知道哪个国家正在调用服务,并在服务中执行一些逻辑(例如,确定要使用的连接字符串)。
但是,我想避免国家代码必须与每个服务请求传递。我在这里有什么选择?
例如,我可以为每个国家设定一个端点吗?但是在那种情况下,我怎么知道用什么端点/国家代码来调用服务?
也许其他可能性?
我有一个WCF REST服务,供不同国家使用的移动应用程序使用。它接受并返回JSON,并使用StructureMap。WCF REST服务:通过国家代码
这个想法是为所有国家创建一个服务实例,但我需要知道哪个国家正在调用服务,并在服务中执行一些逻辑(例如,确定要使用的连接字符串)。
但是,我想避免国家代码必须与每个服务请求传递。我在这里有什么选择?
例如,我可以为每个国家设定一个端点吗?但是在那种情况下,我怎么知道用什么端点/国家代码来调用服务?
也许其他可能性?
多个端点可能是一个解决方案,但您需要一种可靠的方式来确定实际使用的端点。鉴于WCF REST服务的“断开”性质(我的意思是使用非WCF类型进行通信并仅使用WCF属性),这将需要您编写一个WebHostFactory,该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
当前请求。所以你也可以检查这些信息,寻找关于所需语言的线索。但请记住,这些“隐含”信息仅仅是线索,但从来没有清楚地表明用户想要什么。
谢谢。在WebHostFactory中指定国家:这是否意味着为每个端点创建单独的ServiceHost?我如何向每个端点添加不同的自定义数据? –
您提供一个自定义'IInstanceProvider'给服务主机,它通过'Language'属性集产生一个服务实例。这个想法是,使服务实例知道它使用的语言,并且通过WebServiceHostFactory指定该语言。 –
好吧,但是这不就像直接访问服务实现中的WebOperationContext一样吗? –
你是在谈论用户的位置还是用户的语言环境?他们与众不同! –
这是一个确定应用程序安装时确定的国家/地区代码,例如“it”或“be”。 –