2011-11-29 57 views
2

我有一个WCF REST服务,供不同国家使用的移动应用程序使用。它接受并返回JSON,并使用StructureMap。WCF REST服务:通过国家代码

这个想法是为所有国家创建一个服务实例,但我需要知道哪个国家正在调用服务,并在服务中执行一些逻辑(例如,确定要使用的连接字符串)。

但是,我想避免国家代码必须与每个服务请求传递。我在这里有什么选择?

例如,我可以为每个国家设定一个端点吗?但是在那种情况下,我怎么知道用什么端点/国家代码来调用服务?

也许其他可能性?

+0

你是在谈论用户的位置还是用户的语言环境?他们与众不同! –

+0

这是一个确定应用程序安装时确定的国家/地区代码,例如“it”或“be”。 –

回答

2

多个端点可能是一个解决方案,但您需要一种可靠的方式来确定实际使用的端点。鉴于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当前请求。所以你也可以检查这些信息,寻找关于所需语言的线索。但请记住,这些“隐含”信息仅仅是线索,但从来没有清楚地表明用户想要什么。

+0

谢谢。在WebHostFactory中指定国家:这是否意味着为每个端点创建单独的ServiceHost?我如何向每个端点添加不同的自定义数据? –

+0

您提供一个自定义'IInstanceProvider'给服务主机,它通过'Language'属性集产生一个服务实例。这个想法是,使服务实例知道它使用的语言,并且通过WebServiceHostFactory指定该语言。 –

+0

好吧,但是这不就像直接访问服务实现中的WebOperationContext一样吗? –