2011-11-29 59 views
0

我有一个接受CultureInfo对象作为参数的服务方法。我想用它通过指定的语言从资源中获取正确的字符串。所以,我对像服务的方法:WCF服务得到错误的文化

public string GetTranslatedString(CultureInfo c) 

和客户端上我把这个方法是这样的:

ServiceReference.GetTranslatedString(CultureInfo.CurrentUICulture); 

我也试过:

ServiceReference.GetTranslatedString((CultureInfo)CultureInfo.CurrentUICulture.Clone()); 

但产生错误的结果!文化信息对象通过,就好像它描述的是服务所在的PC的文化,而不是客户所在的PC的文化。所以如果客户有“nl”文化,服务器仍然会获得“en”文化!为什么?我知道如何解决这个问题,否则将LCID传递给服务而不是对象,但我真的想知道为什么描述的方法不起作用。

+0

有你使用的调试,以确保你传递什么你认为你从客户端传递?我不确定CultureInfo如何被解析到WSDL中。也许有一些问题呢?一般来说,尝试通过网络传递可互操作的东西。 –

+0

您是否也可以提供客户创建CultureInfo对象的代码? – Talvalin

+0

@Talvalin CultureInfo.CurrentUICulture是一个静态属性。我不知道它是如何初始化的。 –

回答

1

试试这个(仅4乐趣):

CultureInfo ci = CultureInfo.CurrentUICulture; 
string text = ServiceReference.GetTranslatedString(ci); 
+0

我不知道它为什么可以工作,但它的工作原理!任何人都能解释我为什么?顺便说一下,传递CultureInfo.CurrentUICulture.Name和CultureInfo.CurrentUICulture.LCID而不将它们首先分配给某种类型的变量(如此答案中所示)也不起作用,并会产生不正确的结果,如我的问题所示! –

+0

对于我来说,在web.config中设置''和'0123i' –